为什么是Array.Length
int,而不是uint
. 这让我很困扰(只是有点),因为长度值永远不会是负数。
这也迫使我在我自己的类中使用 int 作为长度属性,因为当你指定一个 int 值时,这需要显式转换......
所以最终的问题是:unsigned int ( uint
) 有什么用处吗?甚至微软似乎也没有使用它们。
Unsigned int 不符合 CLS,因此会将属性的使用限制为那些实现了UInt
.
看这里:
框架 1.1
框架 2.0
很多原因:
我认为这也可能与在较低级别上简化事情有关,因为如果 Array.Length 是无符号的,Array.Length 当然会在某个时候添加到负数,并添加到负整数(二进制补码) ,可能会出现混乱的结果。
似乎没有人提供“终极问题”的答案。
我相信无符号整数的主要用途是提供与外部系统(P/Invoke 等)的更轻松接口,并满足移植到 .NET 的各种语言的需求。
通常,整数值是有符号的,除非您明确需要无符号值。这只是它们的使用方式。我可能不同意这个选择,但事实就是如此。
目前,在当今典型的内存限制下,如果您的数组或类似数据结构需要 UInt32 长度,您应该考虑其他数据结构。
使用字节数组,Int32 将为您提供 2GB 的值