令人费解的界外索引

令人费解的界外索引

我的代码中有一段需要反转矩阵。这只能在正方形矩阵(在这种情况下为3x3正方形矩阵)上合理地完成。我使用的用于反转矩阵的工具一直在说我的数组不是正确的正方形。

所以我做了一点测试:

double[,] x = new double[3, 3];

MessageBox.Show(x.GetLength(0).ToString());
MessageBox.Show(x.GetLength(1).ToString());
MessageBox.Show(x.GetLength(2).ToString());

第一个出现为“3”。第二个出现为“3”。第三个出现为IndexOutOfRangeException。我只是忽略了一个非常明显的东西还是...这有点奇怪吗?

(注意:这是来自使用C#使用.Net 2.0的代码)

最佳答案

您只有一个二维数组。 您为什么期望要求提供三维尺寸来获得有效结果?
Array.GetLength()方法返回数组指定维度中的元素数。在您的情况下:

x.GetLength(2).ToString();   // asking for size of third dimension

您要问一个二维数组其第三维的大小是多少。结果是IndexOutOfRangeException。这是预期的行为。

在您的代码示例中,您似乎将每个规定维的大小与维数混淆了。以下是一些不同尺寸的矩形阵列的示例:
var d1 = new int[5];     // one dimensional array, containing 5 elements
var d2 = new int[3,3];   // two-dimensional 3x3 element array
var d3 = new int[2,2,2]; // three-dimension array of 2x2x2 elements
var d4 = new int[2,5,6,8]; // four dimensional array, of 2x5x6x8 elements

看到图案了吗?维数由确定,您在数组声明中指定了个数字。每个维度的大小由声明中每个数字的值确定。

关于c# - 令人费解的界外索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3532349/

10-10 20:27