为什么Array.Length
是int,而不是uint
。这让我感到困扰(只是一点点),因为长度值永远不会是负数。
这也迫使我在我自己的类上使用int作为length-property,因为当你 指定一个int值,这需要显式转换...
所以最终的问题是:unsigned int(uint
)有用吗?即使是微软似乎也不会使用它们。
答案 0 :(得分:59)
Unsigned int不符合CLS,因此会将该属性的使用限制为那些实现UInt
的语言。
见这里:
框架1.1
Framework 2.0
答案 1 :(得分:48)
很多原因:
答案 2 :(得分:1)
我认为这也可能与简化较低级别的事情有关,因为如果Array.Length是无符号的,则Array.Length当然会在某个时刻被添加到负数,并添加到负数int(两个补充),可能会有凌乱的结果。
答案 3 :(得分:1)
看起来没人能回答“最终的问题”。
我认为无符号整数的主要用途是提供更容易与外部系统(P / Invoke等)的接口,并涵盖移植到.NET的各种语言的需求。
答案 4 :(得分:-1)
通常,除非明确需要无符号值,否则将对整数值进行签名。这就是它们的使用方式。我可能不同意这个选择,但这就是它的方式。
目前,对于今天的典型内存限制,如果您的数组或类似数据结构需要UInt32长度,则应考虑其他数据结构。
使用字节数组,Int32将为您提供2GB的值