2010-05-05 6 views
3

有没有人发现奇怪uint和ulong的默认上下文没有被选中而不是被检查,因为它们是为了表示永远不会被否定的值?确保unsigned int/long始终在C#中选中的上下文中执行

因此,如果一些代码试图违反这个约束,我认为自然和首选的行为是抛出一个异常,而不是返回最大值(这可以很容易地将重要的数据片段置于无效状态,不可能恢复..)。

是否有一个现有属性可以应用于任何类/程序集,以便它始终在已检查的上下文中执行算术运算?我正在考虑自己编写一个(作为使用PostSharp的一个方面),但如果已经有一个,它会很棒。

非常感谢,

回答

4

我看不出有什么是关于无符号整数这里签署了对比不同......为什么是从0到uint.MaxValue可能下溢比从溢到int.MinValue更好int.MaxValue

如果您希望通过检查来编译整个程序集,只需在命令行或Visual Studio中使用/checked(或/checked+更明确),在项目属性下找到生成选项卡,单击“高级...”。 。“并勾选”检查算术溢出/下溢“框。

我不相信有什么办法只为一个特定的班级做到这一点。

+0

完全同意你对有符号整数的看法,这种处理下溢的默认行为看起来很奇怪,你知道它为什么这样设计吗?并感谢关于使整个程序集经过检查编译的提示,这正是我所追求的! :-) – theburningmonk 2010-05-05 10:48:34

+0

@theburningmonk:我相信默认选择是因为它的执行效率比检查的实现要好得多。值得注意的是,您可能需要使用未经检查的块来计算哈希代码,它只是重要的位模式,而不是数量级。 – 2010-05-05 11:26:13

相关问题