gpt4 book ai didi

c# - 在检查 block 中调用的方法中没有溢出异常

转载 作者:行者123 更新时间:2023-11-30 12:22:47 25 4
gpt4 key购买 nike

checked block 用于确保如果发生溢出,则抛出异常。例如,

下面的代码会抛出溢出异常。

checked
{
int a = 123456;
int b = 123456;
Console.WriteLine(a * b);
}

但是如果我在 checked block 中调用一个方法,而该方法又包含抛出溢出异常的代码,checked block 似乎没有检测到这一点。是否也可以检测到这些。

checked
{
int a = 123456;
int b = 123456;
Console.WriteLine(Mul(a, b));
}

public int Mul(int a, int b)
{
return a * b;
}

最佳答案

这篇博文给出了关于这个主题的一些解释:

https://devblogs.microsoft.com/oldnewthing/20140815-00/?p=233

简而言之:一条语句是以checked还是unchecked模式执行的,是在编译时检测到的,而不是在运行时检测到的。如果您的程序流离开包含函数方法调用的已检查 block ,则已检查/未检查状态特定于函数本身。

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 方法中指定并在那里创建一个检查 block 。

public int Mul(int a, int b)
{
checked {
return a * b;
}
}

关于c# - 在检查 block 中调用的方法中没有溢出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39409260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com