大多数时候,我们代表的概念永远不会小于0.例如,为了声明长度,我们写道:
int length;
该名称很好地表达了它的目的,但您可以为其指定负值.在某些情况下,您可以通过这种方式更清楚地表达您的意图:
uint length;
我能想到的一些缺点:
unsigned types(uint,ulong,ushort)不符合CLS,因此您不能将其与其他不支持此语言的语言一起使用
.Net类大多数时候都使用签名类型,因此你必须进行强制转换
思考?
如果您使用值0减去带符号的数字,它将变为负数,您可以轻松地对此进行测试.如果使用值0递减无符号数,则它会下溢并成为该类型的最大值 - 稍微更难检查.
你的第二点是最重要的.通常你应该使用,int
因为对于整数值来说这是一个非常好的"全能".我只会使用,uint
如果你绝对需要能够计数高于int
,但不使用额外的内存long
需求(它不是更多的内存,所以不要便宜:-p).
"在罗马做到入乡随俗."
虽然理论上在使用无符号值时有一个优势,因为它使代码更具表现力,但这根本不是用C#来完成的.我不确定为什么开发人员最初没有设计接口来处理uints
和使CLS兼容,但现在火车离开了车站.
由于一致性通常很重要,我建议采用C#之路并使用int
s.