tôi có chức năng sau đây để có được một int từ một byte cao và byte thấp:Tại sao cảnh báo FxCop về lỗi tràn (CA2233) trong mã C# này?
public static int FromBytes(byte high, byte low)
{
return high * (byte.MaxValue + 1) + low;
}
Khi tôi phân tích lắp ráp với FxCop, tôi nhận được cảnh báo quan trọng sau đây:
CA2233: OperationsShouldNotOverflow
Hoạt động số học không được là được thực hiện mà không cần xác nhận hợp lệ các toán hạng để tránh tràn.
Tôi không thể thấy cách điều này có thể tràn, vì vậy tôi giả định rằng FxCop đang quá hăng hái.
Tôi có thiếu gì đó không? Và những gì các bước có thể được thực hiện để sửa chữa những gì tôi có (hoặc ít nhất là làm cho cảnh báo FxCop biến mất!)?
Đặt cược của tôi là ở phần "byte.MaxValue + 1". – Pwninstein
Đặt cược của bạn là sai. Mã của anh ta không thể gây ra tràn từ byte.MaxValue sẽ luôn được chuyển đổi hoàn toàn thành int trước khi bước bổ sung diễn ra. - Bất cứ khi nào một phương thức thực hiện phép toán số học và không xác nhận hợp lệ toán hạng trước (để ngăn chặn tràn), bạn sẽ nhận được CA2233. Có rất nhiều ví dụ về cách sửa lỗi này trên MSDN tại http://msdn.microsoft.com/en-us/library/ms182354.aspx – BrainSlugs83
Đọc http://msdn.microsoft.com/en-us/library/ ms182354.aspx – Lijo