C# 在C中引发TypeCast运算符异常#

C# 在C中引发TypeCast运算符异常#,c#,asp.net,visual-studio-2010,visual-c#-express-2010,C#,Asp.net,Visual Studio 2010,Visual C# Express 2010,我从C#中的类型转换中得到了一些意想不到的行为 尝试转换时 float f = 123124334234234.34F; 转换为一个整数,如下所示: int i = (int)f; 我被抛出一个异常。根据MSDN,“一般来说,隐式转换运算符不应抛出异常,也不应丢失信息,以便在程序员不知情的情况下安全使用。” 另外,根据视频中7:54的这个家伙,他陈述并展示了一个示例,其中使用typecast操作符进行转换时不会引发异常 视频链接: 那么,为什么在运行上述代码时会出现OverflowExcep

我从C#中的类型转换中得到了一些意想不到的行为

尝试转换时

float f = 123124334234234.34F;
转换为一个整数,如下所示:

int i = (int)f;
我被抛出一个异常。根据MSDN,“一般来说,隐式转换运算符不应抛出异常,也不应丢失信息,以便在程序员不知情的情况下安全使用。”

另外,根据视频中7:54的这个家伙,他陈述并展示了一个示例,其中使用typecast操作符进行转换时不会引发异常

视频链接:

那么,为什么在运行上述代码时会出现OverflowException?

我想您可能已经设置了编译器标志。打开该选项后,通常会溢出的算术运算会在运行时抛出异常

如果整数算术语句不在 选中或未选中的关键字会导致值超出 数据类型,编译中使用/checked+(/checked), 该语句在运行时导致异常

使用以下代码:

float f = 123124334234234.34F;
int i = (int)f;
关闭设置后,它通常会溢出为负数。当标志打开时,它会抛出溢出异常


编辑:也就是说,我不知道如何在SharpDevelop中更改该标志。Visual Studio的说明包含在上面的链接页面中;可能它们与SharpDevelop类似。

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

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

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


这是实际代码。它不应该抛出异常。对于int,您要转换的值高于MAXVALUE-请尝试long即使它更大,也不应该抛出异常。@GrantWinney是的,这也是视频中的那个人得到的。我相信Int的最小值。我只是得到了一个OverflowException。我得到了一个OverflowException,它指向了进行演员表演的确切路线。非常好的观察。我稍后会尝试更改标志,看看这是否会改变行为。是的,这就是解决方案。项目>项目选项>“编译”选项卡。“常规”列表中有一个选项称为“检查算术溢出/下溢”。检查过了。如果未选中,代码不会引发异常并返回Int32.MinValue。很抱歉,请删除该检查,但您指出了路径,下面的答案将其点亮。感谢您的卓越贡献和想法!