checked和unchecked关键字用于控制C#中整数运算溢出行为:checked在溢出时抛出OverflowException,确保数据安全;unchecked则允许静默截断,适用于性能敏感或需环绕行为的场景。两者可作用于表达式或代码块,且能覆盖项目级别的/checked编译设置,实现精细控制。常量表达式默认启用溢出检查,而非常量表达式的默认行为受编译选项影响。关键业务逻辑推荐使用checked保障正确性,位运算、哈希计算等场景可使用unchecked追求性能或特定效果。

C#中的
checked
unchecked
checked
unchecked
当一个运算被放置在
checked
int
long
short
byte
System.OverflowException
// checked 表达式示例
int maxInt = int.MaxValue;
try
{
int result = checked(maxInt + 1); // 这里会抛出 OverflowException
Console.WriteLine($"Checked result: {result}");
}
catch (OverflowException ex)
{
Console.WriteLine($"Checked expression error: {ex.Message}");
}
// checked 语句块示例
int a = 2000000000; // 20亿
int b = 2000000000; // 20亿
try
{
checked
{
int sum = a + b; // 理论上会溢出int的最大值 (约21.47亿)
Console.WriteLine($"Checked sum: {sum}");
}
}
catch (OverflowException ex)
{
Console.WriteLine($"Checked block error: {ex.Message}");
}相反,当运算处于
unchecked
int.MaxValue + 1
int.MinValue
// unchecked 表达式示例
int maxInt = int.MaxValue;
int resultUnchecked = unchecked(maxInt + 1); // 不会抛异常,结果会是 int.MinValue
Console.WriteLine($"Unchecked expression result: {resultUnchecked}");
// unchecked 语句块示例
int c = 2000000000;
int d = 2000000000;
unchecked
{
int sumUnchecked = c + d; // 不会抛异常,结果会是 -294967296
Console.WriteLine($"Unchecked block sum: {sumUnchecked}");
}需要注意的是,对于常量表达式(在编译时就能确定值的表达式),即使没有显式使用
checked
我个人觉得,C#提供这种溢出检查机制,核心是为了保障数据完整性和程序行为的可预测性。你想啊,在很多业务场景下,比如财务计算、库存管理、安全相关的计数器,哪怕是微小的数字溢出,都可能导致灾难性的后果。想象一下,如果你的银行账户余额因为一个整数溢出,突然从正数变成了负数,那简直是无法接受的。
如果没有
checked
所以,
checked
理解了背后的哲学,我们再来聊聊实际操作中,到底什么时候该用“严谨”的
checked
unchecked
优先使用checked
checked
checked
unchecked
优先使用unchecked
unchecked
unchecked
选择哪一个,更多的是一种权衡:是选择安全性、可预测性优先,还是选择性能或特定算法需求优先。我个人倾向于在不确定或关键业务逻辑中,默认偏向
checked
unchecked
这部分就有点深入到C#编译器的“脾气”了。
checked
unchecked
首先,C#编译器提供了一个
/checked
/checked+
/checked-
/checked+
OverflowException
/checked-
在Visual Studio中,你可以在项目属性的“生成”选项卡下找到“高级”按钮,里面有一个“检查算术溢出/下溢”的复选框,这其实就是控制
/checked
那么,
checked
unchecked
/checked+
/checked-
checked
checked
/checked+
/checked-
unchecked
unchecked
所以,这提供了一个非常灵活的控制粒度。你可以让整个项目在某种默认模式下运行(通过编译选项),但对于那些特别关键或特别需要特定行为的代码片段,你可以用
checked
unchecked
以上就是C#的checked和unchecked关键字怎么控制溢出检查?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号