【发布时间】:2023-04-05 03:54:01
【问题描述】:
这只是对语言的好奇而不是问题。
IEnumerable 的 ElementAt() 方法接受整数来获取可枚举集合的第 N 个元素。
例如
var list = new List<char>() { 'a', 'b', 'c' };
var alias = list.AsEnumerable();
int N = 0;
alias.ElementAt(N); //gets 'a'
很好,但是,为什么 ElementAt() 不接受无符号整数 (uint) ? 例如
uint N = 0;
alias.ElementAt(N); //doesn't compile
我可以理解为什么 ElementAt 可以接受整数以允许负索引(例如 Python 允许负索引,其中 list[-1] 指的是最后一个元素),因此对于那些使用负索引的语言来说,接受负索引是有意义的即使 C# 没有。
但我不太明白禁止无符号整数的原因,如果有的话,无符号整数更好,因为它保证索引不会为负(因此只需要检查范围的上限)。
我能想到的最好的事情可能是 CLR 团队决定对有符号整数进行标准化,以允许具有负索引的其他语言(例如 Python)使用相同的代码并确保范围在不同语言之间保持一致。
对于为什么 .ElementAt() 不允许无符号整数,有没有人有更好/权威的解释?
-马辛
【问题讨论】:
-
无符号整数不是CLS compliant。
-
谢谢。让我看到了 CLS 合规性。 stackoverflow.com/questions/6325/… 可能对其他想知道这一切的人也很有用。
标签: c# .net clr ienumerable