checked块用于确保是否发生溢出,抛出异常.例如,
下面的代码抛出溢出异常,这很好.
checked
{
int a = 123456;
int b = 123456;
Console.WriteLine(a * b);
}
但是如果我在checked块中调用一个方法,并且该方法依次具有抛出溢出异常的代码,则check块似乎没有检测到.是否有可能检测到这些.
checked
{
int a = 123456;
int b = 123456;
Console.WriteLine(Mul(a, b));
}
public int Mul(int a, int b)
{
return a * b;
}
最佳答案 此博客文章提供了有关此主题的一些解释:
https://blogs.msdn.microsoft.com/oldnewthing/20140815-00/?p=233
简而言之:在编译时检测语句是以已检查还是未检查模式执行,而不是在运行时检测到.如果程序流离开包含函数方法调用的已检查块,则检查/未检查状态特定于函数本身.
可以从已检查和未检查的代码中调用Mul方法 – 像这样:
checked
{
int a = 123456;
int b = 123456;
Console.WriteLine(Mul(a, b));
}
unchecked
{
int a = 123456;
int b = 123456;
Console.WriteLine(Mul(a, b));
}
如何实现异常行为?抛出异常与否?
因此,您必须在Mul方法中具体,并在那里创建一个检查块.
public int Mul(int a, int b)
{
checked {
return a * b;
}
}