为什么无符号整数不符合CLS?
我开始认为类型规范只是为了性能而不是为了正确性.
为什么是Array.Lengthint,而不是uint.这让我感到困扰(只是一点点),因为长度值永远不会是负数.
这也迫使我在我自己的类上使用int作为length-property,因为当你指定一个int值时,这需要显式地转换...
所以最终的问题是:对于unsigned int(uint)有什么用?甚至微软似乎也没有使用它们.
即使在框架类中,我总是遇到int用于.Count等等的代码而不是代码uint.
这是什么原因?
它背后有一个原因.NET Framework不使用无符号数据类型吗?
我不应该在我的代码中采用它们,但是例如,List <> 的Count属性是一个int.你不能有负数,所以为什么不把它定义为uint?即使我知道计数不能为负,我应该只使用int吗?
我是C#的新手,我有一些C++和C的背景,这就是为什么我没有理解,为什么Lists <>被索引int而不是像一些无符号整数uint.这是非常不合逻辑的,因为不能有一个元素,即-1左右.
当以下代码无法运行时,会出现这种情况:
List<string> some_list = new List<string>();
/* Insert some strings */
for (uint i = 0; i < some_list.Count; ++i) {
string element = some_lists[i]; // Error: No possible conversion from uint to int
/* do something with string_element */
}
Run Code Online (Sandbox Code Playgroud)
在C++中,这会给我一个编译器警告,但仍然编译正常.那么C#在列表中使用有符号整数作为索引的原因是什么?这对我来说看起来不是很尖锐,但也许有人可以启发我.
似乎无符号整数对方法参数和类成员非常有用,它们永远不应该是负数,但我没有看到很多人以这种方式编写代码.我自己尝试过,发现需要从int转换为uint有点烦人...
无论如何你对此有何想法?