Interlocked.Increment
的msdn文档说明:
此方法通过包装处理溢出条件:如果location=int32.maxvalue,location+1=int32.minvalue。没有引发异常。
在这种情况下,“位置+1”是什么意思?如果Increment
更改了location字段旁边的内存位置,那么考虑到相邻的位置可以是任何内容(对象引用、类元数据等),这不可能导致.net运行时损坏吗?
最佳答案
它只是意味着,如果您想要增加的值已经等于Int32.MaxValue
并且您增加了一个,而不是抛出一个错误,那么它将返回Int32.MinValue
如果你这样做的话
var value = Int32.MaxValue;
value += 1;
如果明确希望引发异常,请使用
checked
关键字var value = Int32.MaxValue;
value = checked(value + 1);