我在C#中的TypeCast转换中遇到了一些意想不到的行为。
尝试转换时..
float f = 123124334234234.34F;
按如下方式进入整数:
int i = (int)f;
我正在抛出异常。根据MSDN“一般情况下,隐式转换运算符不应该抛出异常,永远不会丢失信息,以便在没有程序员意识的情况下安全地使用它们。”
此外,根据视频中7:54标记处的这个家伙,他说明了一个示例,其中使用类型转换运算符进行转换不会抛出异常。
视频链接:http://www.youtube.com/watch?v=IcDaNmGDMoM&index=8&list=PLAC325451207E3105
那么为什么我在运行上面的代码时遇到OverflowException?
答案 0 :(得分:3)
我认为您可能设置了/checked+
编译器标志。打开后,通常会溢出的算术运算会在运行时抛出异常。
如果整数算术语句不在a的范围内 选中或取消选中关键字会产生超出范围的值 数据类型和/ checked +(/ checked)用于编译, 该语句在运行时导致异常。
使用以下代码:
float f = 123124334234234.34F;
int i = (int)f;
关闭设置后,它会正常溢出为负数。打开标志后,它会抛出溢出异常。
编辑:那就是说,我不知道如何改变SharpDevelop中的那面旗帜。 Visual Studio的说明包含在上面的链接页面中;也许它们与SharpDevelop类似。答案 1 :(得分:2)
默认情况下,SharpDevelop启用"检查算术溢出/下溢"标志,默认情况下Visual Studio已禁用。
您可以在项目属性中禁用它:
同样,如果有人在这篇文章上发现并使用Visual Studio: