我正在创建一个多维数组来查找我的程序中的东西。我让它读和写正确,但一旦我试图改变它的值后,它似乎停止工作。
我的读代码是:
Arr = <Code>;(this is a part of code I have not written, but it works)
if (0f == Arr[0,0,0])
book = true;
if (1f == Arr[0,0,1])
video = true;
上面的这部分是有效的,我做了打印测试,它们适合视频和书籍。这部分也与我的问题无关。
这就是我正在写的部分。
Arr[0,0,0] = 0f;
Arr[0,0,1] = 1f;
if (book == true)
Arr[0,0,0] = 1f;
else if (video == true)
Arr[0,0,1] = 2f;
我得到错误:IndexOutOfRangeException:数组索引超出了第80行。第80行是Arr[0,0,0] = 0;
,它之前的行调用
print(Arr.GetLength(0).ToString());
print(Arr.GetLength(1).ToString());
print(Arr.GetLength(2).ToString());
这些打印正确的长度,我期望这个数组(3,3,5)。我不太确定为什么我得到一个indexoutorangeexception考虑到我已经检查了数组的长度,它似乎还可以-我也在网上查了一下,是的,这是在c#中访问多维数组的方式。我以前做过一些,但我不知道为什么我在一个数组上得到一个超出范围的异常,这个数组的大小适合我使用它的用途。
首先,您应该知道Array是一个抽象类
public abstract class Array : ICloneable, IList, ICollection, IEnumerable
所以你不能这样做:
Array arry = new Array();
但是你可以这样做:
Array[,,] arry = new Array[1,2,3];
为什么它有效?你应该注意[,,]
,你只声明了一个抽象类数组,但没有实现它,所以它工作
下面的例子展示了如何声明和实现数组,并将value设置为其成员:
static void Main(string[] args)
{
//Declare a int 3-dimentions array and initial its values
int[, ,] a = new int[,,] { { { 1, 2, 3 } }, { { 2, 3, 4 } }, { { 2, 3, 4 } } };
if (a[0, 0, 0] == 0f) //<-- It's aright
{
//dosomething
}
;
a[0, 0, 0] = 20; //<it's aright too
//declare a 3-dimentions array
Array[, ,] arry = new Array[1, 2, 3]; //set its value
arry[0, 0, 0] = new int[] { 1, 2, 3 };
arry[0, 0, 1] = new int[] { 1, 2, 3 };
}
我不知道更多关于你的问题根据你张贴的