TypeCast运算符在C#中抛出异常

时间:2014-04-28 00:22:58

标签: c# asp.net visual-studio-2010 visual-c#-express-2010

我在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?

2 个答案:

答案 0 :(得分:3)

我认为您可能设置了/checked+编译器标志。打开后,通常会溢出的算术运算会在运行时抛出异常。

  

如果整数算术语句不在a的范围内   选中或取消选中关键字会产生超出范围的值   数据类型和/ checked +(/ checked)用于编译,   该语句在运行时导致异常。

使用以下代码:

float f = 123124334234234.34F;
int i = (int)f;

关闭设置后,它会正常溢出为负数。打开标志后,它会抛出溢出异常。

编辑:那就是说,我不知道如何改变SharpDevelop中的那面旗帜。 Visual Studio的说明包含在上面的链接页面中;也许它们与SharpDevelop类似。

答案 1 :(得分:2)

默认情况下,SharpDevelop启用"检查算术溢出/下溢"标志,默认情况下Visual Studio已禁用

您可以在项目属性中禁用它:

enter image description here

同样,如果有人在这篇文章上发现并使用Visual Studio:

enter image description here