无符号与带符号数作为索引

sim*_*sjo 9 .net indexing unsigned signed

在.Net中使用带符号数作为索引的理由是什么?

在Python中,您可以通过发送负数来从数组的末尾开始索引,但在.Net中不是这种情况.对.Net来说,以后添加这样的功能并不容易,因为它可能会在索引时使用特殊规则(是的,一个坏主意,但我猜它会发生)破坏其他代码.

并不是说我曾经需要索引大小超过2,147,483,647的数组,但我真的不明白为什么他们选择签名数字.

是不是因为在代码中使用带符号的数字更为正常?

编辑:我刚刚找到这些链接:

C/C++中无符号迭代的危险

签名字长和索引

编辑2:好的,Matthew Flaschen发布的帖子还有其他几个很好的理由:

  • 历史原因,因为它是一种类似c语言
  • 与c互操作

Arn*_*rne 5

使用低于 0 的值作为无效索引可能是长期以来的传统。如果找不到元素,像 String.IndexOf 这样的方法返回 -1。因此,必须对返回值进行签名。如果索引消费者需要无符号值,则必须 a) 检查并 b) 转换该值以使用它。使用签名索引,您只需要检查。


Rot*_*sor 3

当然是为了简单起见。您喜欢使用无符号整数进行大小算术吗?