令人困惑的索引 - 超出界限

KCh*_*oux 5 c# matrix multidimensional-array

我的代码中有一个部分需要反转矩阵.这只能合理地在方形矩阵上完成,在这种情况下是3×3方阵.我用来反转矩阵的工具一直说我的阵列不是一个正确的方块.

所以我做了一点测试:

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

MessageBox.Show(x.GetLength(0).ToString());
MessageBox.Show(x.GetLength(1).ToString());
MessageBox.Show(x.GetLength(2).ToString());
Run Code Online (Sandbox Code Playgroud)

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

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

LBu*_*kin 11

您只有一个包含两个维度的数组.为什么你会期望要求第三维的大小给你一个有效的结果?

Array.GetLength()方法返回Array指定维度中的元素数.在你的情况下:

x.GetLength(2).ToString();   // asking for size of third dimension
Run Code Online (Sandbox Code Playgroud)

你问的是二维数组它的第三维尺寸是多少.结果是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
Run Code Online (Sandbox Code Playgroud)

看模式?维数由以下因素决定多少个号码,你在数组声明中指定.每个维度的大小由声明中每个数字确定.