我的代码中有一段需要反转矩阵。这只能在正方形矩阵(在这种情况下为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/