
Why is Array.Length an int, and not an uint本问题已经有最佳答案,请猛点这里访问。
为什么
这也迫使我在我自己的班级上使用int作为长度属性,因为当您
因此,最终的问题是:unsigned int(
Unsigned int不符合CLS,因此会将属性的使用限制为那些确实实现了 看这里: 框架1.1
框架2.0
很多原因:
似乎没有人提供对"最终问题"的答案。 我相信无符号整数的主要用途是使与外部系统(P / Invoke等)的接口更容易,并满足移植到.NET的各种语言的需求。 我认为这也可能与简化底层操作有关,因为如果Array.Length是无符号的,则Array.Length当然会在某个时候添加到负数,并添加到负int(二进制补码) ,结果可能会混乱。 通常,整数值是带符号的,除非您明确需要一个无符号的值。这只是它们的使用方式。我可能不同意这种选择,但这就是事实。 目前,在当今典型的内存限制下,如果您的数组或类似数据结构需要UInt32长度,则应考虑其他数据结构。 使用字节数组,Int32将为您提供2GB的值 |