Tôi không thể hiểu tại sao mã bên dưới biên dịch.Tại sao trình biên dịch C# không phàn nàn với Tràn cho quá trình đúc 'xấu' rõ ràng này?
public void Overflow()
{
Int16 s = 32767;
s = (Int16) (s + 1);
}
Tại thời điểm biên dịch, rõ ràng là (s +1) không phải là Int16 nữa khi chúng tôi biết giá trị của s.
Và CLR cho phép đúc để:
- Để loại riêng của mình
- Hoặc bất kỳ của các cơ sở-loại (vì nó là an toàn)
Như Int32 là không Int16 và Int16 là không phải loại cơ sở của Int32.
Câu hỏi: Vậy tại sao trình biên dịch không thành công cho quá trình truyền ở trên? Bạn có thể vui lòng giải thích nó từ CLR và trình biên dịch quan điểm?
Cảm ơn
Bạn sử dụng dàn diễn viên để * chặn * tràn. Nếu bạn muốn một thì sử dụng Convert.ToInt16() để thay thế. –