C# 多维数组不允许写入到

C# 多维数组不允许写入到,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我正在创建一个多维数组,以便在程序中查找内容。我让它正确地读写,但一旦我试图在读了之后改变它的值,它似乎就停止工作了 我的阅读代码是: 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 = <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。考虑到我已经检查了数组的长度,我不太确定为什么会出现indexoutofrangeexception,这似乎没问题-我也在网上查过,是的,这是访问C中多维数组的方法。我以前做过几次,但我不明白为什么在一个数组上会出现超出范围的异常,而该数组的大小与我使用它的目的相符。

首先,您应该知道数组是抽象类

public abstract class Array : ICloneable, IList, ICollection, IEnumerable
所以你不能这样做:

Array arry = new Array();
   Array[,,] arry = new Array[1,2,3];
但你可以这样做:

Array arry = new Array();
   Array[,,] arry = new Array[1,2,3];
它为什么有效?您应该注意[,],您只声明了一个abstruct类数组,但没有实现它,所以它可以工作

下面的示例演示如何声明并实现数组,将值设置为其成员:

  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 };
    }

根据您发布的内容,我对您的问题了解不多

这是一个多维数组,还是一个模仿MD数组用法的特殊类?我问这个问题的原因是,如果有一个特殊的getter/setter,setter可能会因为setter代码中可能存在的错误而无法正确运行。请尝试在调试器中逐步遍历该函数。它是否仍然抛出同一行?如果您展示Arr的声明以及实例是如何创建的,这可能会有所帮助。为了调试,看到什么报告可能是一个有趣的事情,你可能需要考虑的是同步。是否有其他线程同时修改数组?如果是,考虑访问同步到数组。它在开始时声明为浮点[,] ARR=新浮点[3,3,5];这是迄今为止我正在调用并创建的唯一一个数组修改。这是一个名为Arr的实际多维数组,而不是模拟类。我已经尽可能多地浏览了它,使用GetLength并尝试了数组中的每一个点——就像它处理了它自己一样,但是自从我调用.GetLength之后,我才知道它仍然存在。