Mar*_*ell 38
算术溢出; 例如:
int i = int.MaxValue -10;
checked {
i+= 20; // boom: OverflowException
// "Arithmetic operation resulted in an overflow."
}
Run Code Online (Sandbox Code Playgroud)
因此,checked当您不希望意外溢出/环绕成为问题时,请使用,而宁愿看到异常.
unchecked显式设置模式以允许溢出; 默认值是unchecked除非你告诉编译器 - 通过代码(上面)或编译器开关(/checked在csc中).
checked块用于处理算术溢出/下溢情况.举个例子:
假设您想将int值转换为short类型值(称为缩小转换).int类型变量的值范围为-2,147,483,648到2,147,483,647.但空头只能从-32,768到32,767.
由于这个原因,短变量不能具有int变量可以具有的所有可能值.如果有些如何,可以按以下示例进行投射:
int y = 1000000000;
short x = (short)y;
Run Code Online (Sandbox Code Playgroud)
显然,您可以看到y的值在短变量的有效值之外.因此发生算术溢出情况.
默认情况下,C#不会为上面的代码抛出任何异常.但是有几种方法可以抛出异常并处理它.在这种情况下,检查块就派上用场了
try
{
checked
{
int y = 1000000000;
short x = (short)y;
}
}
catch (OverflowException ex)
{
MessageBox.Show("hey, we got a overflow/underflow situation");
}
catch (Exception ex)
{
MessageBox.Show("Error");
}
Run Code Online (Sandbox Code Playgroud)
catch块导致抛出溢出异常,如果cast导致溢出/下溢的情况.在这种情况下,它显示错误消息
"嘿,我们遇到溢出/下溢的情况"
如果我们想在转换发生时丢弃下溢/溢出并继续操作,则使用未经检查的块.
| 归档时间: |
|
| 查看次数: |
7149 次 |
| 最近记录: |