Mam następującą funkcję aby uzyskać int z wysokiej bajt i niskiej bajt:Dlaczego ostrzeżenie FxCop o przepełnieniu (CA2233) w tym kodzie C#?
public static int FromBytes(byte high, byte low)
{
return high * (byte.MaxValue + 1) + low;
}
Kiedy analizuje zespół z FxCop, pojawia się następujący krytyczne ostrzeżenie:
CA2233: OperationsShouldNotOverflow
Operacje arytmetyczne nie powinny być wykonywane bez sprawdzania poprawności operandów , aby zapobiec przepełnieniu.
Nie widzę, jak to możliwe, że może się przelać, więc zakładam, że FxCop jest nadgorliwy.
Czy czegoś brakuje? I jakie kroki można podjąć, aby poprawić to, co mam (lub przynajmniej sprawić, by ostrzeżenie FxCop zniknęło!)?
Mój zakład dotyczy części "byte.MaxValue + 1". – Pwninstein
Twój zakład jest nieprawidłowy. Jego kod nie może powodować przepełnienia, ponieważ bajt.MaxValue będzie ZAWSZE był niejawnie konwertowany na int przed krokiem dodawania. - Za każdym razem, gdy metoda wykonuje operację arytmetyczną i nie sprawdza wcześniej operacji (aby zapobiec przepełnieniu) otrzymasz CA2233. Istnieje wiele przykładów naprawienia tego w witrynie MSDN pod adresem http://msdn.microsoft.com/en-us/library/ms182354.aspx – BrainSlugs83
Przeczytaj http://msdn.microsoft.com/en-us/library/ ms182354.aspx – Lijo