c#数组索引类型检查

Dan*_*Ash 3 c# arrays indexing compilation

好吧,我在一些同事刚刚开始支持的代码中遇到了这个问题.我从来没有做过这样的事情但不会,但我很惊讶编译器没有将它标记为错误.

基本上你可以看到这个小片段的"奇怪"行为:

array[3/4] = 3;

这是允许的,即使3/4,我认为,将返回双倍.如果您将其更改为:

array[3.0/4] = 3;

您确实收到编译器错误.

我假设第一个没有创建编译器错误,因为它执行整数除法并返回一个整数.

Wal*_*mar 5

是的,如果两个部分都是整数 - 编译器执行整数除法.你得到

3 / 4 = 0
Run Code Online (Sandbox Code Playgroud)

当您尝试将double除以整数时 - 您将获得double结果,这不是数组的有效索引.

  • 您可以使用这个`(3/4).GetType()`轻松验证,它将是`System.Int32`. (3认同)