在C#中使用算术运算符时,我注意到没有编译时错误,但是有明显的运行时错误。 将整数类型相互转换时,是否有任何方法可以将这种溢出异常作为编译时错误注意到?
static void Main(string[] args)
{
byte[] myArray = new byte[10];
for (byte counter = 0; counter < myArray.Length; counter++)
{
myArray[counter] = Convert.ToByte(counter + 300);
}
foreach (int member in myArray)
{
Console.WriteLine(member);
}
}
很显然,当您运行此代码时,因为它将尝试在一个字节中存储一个超过300的值,由于其256个限制,您将获得OverflowException。
答案 0 :(得分:2)
请注意,编译器只会看到
public static byte ToByte (int value);
使编译器“了解” ToByte()方法是一项功能请求。
该功能将永远是不完整的。 byte.Parse("300")
怎么样?
要求编译器捕获强制转换,如
myArray[counter] = (byte) (counter + 300);
但它也不会这样做。 counter
可能是-200。
在这种情况下,它知道counter
的范围,因为它属于for循环。但是应该检查多少个代码路径?这将是一个仅在某些时间有效的功能。