如何从其他类引用3D数组?

时间:2016-05-06 07:04:17

标签: c# class multidimensional-array reference main

在主程序课程中我有:

 static void Main()
 {
    string[,,] anArray = new string [3,3,3];
        anArray[0,0,0] = "value1";
        anArray[0,0,1] = "value2"; .... //filling the rest of the array.
 }

如何将此数组传递到另一个单独的类" anotherClass"使用具有多个参数的构造函数,如:

 class AnotherClass
 {
 private string[,,] anotherClassArray;

 public string[,,] AnotherClassArray
 {
     get { return anotherClassArray;}
 }

 public AnotherClass (string[,,] fromAnArray)
 {
    anotherClassArray = new string [fromAnArray.Length];
 }
 }

我已经看到过一些简单的1维数组从Main程序传递到另一个单独的类并再次返回的例子但是当我尝试按照相同的例子进行多维时我得到了错误:

"无法隐式转换类型' string []'到'字符串[,*]'"尝试初始化新阵列时。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

string[, ,] anotherClassArray = new string[anArray.GetLength(0),
                                           anArray.GetLength(1),
                                           anArray.GetLength(2)];

<强>更新

作为一项实验,如果您希望对任何未知数量的维度将其设为通用,则可以使用此方法:

private Array CreateArrayWithSameDimensions(Array inArray)
{
    int[] lengths = new int[inArray.Rank];
    for (int i = 0; i < inArray.Rank; i++)
    {
        lengths[i] = inArray.GetLength(i);
    }
    Array myArray = Array.CreateInstance(typeof(string), lengths);
    return myArray;
}

这种方法的问题在于访问此数组并不像已知维度那样简单。这是一个使用示例:

Array myArray = CreateArrayWithSameDimensions(anArray);
int[] indices = new int[anArray.Rank];

for (int i = 0; i < anArray.Rank; i++)
{
       indices[i] = 0;
}

myArray.SetValue("test", indices);

这会在该数组的下限索引中设置test。如果输入数组是一个三维数组,在myArray [0,0,0]中我们会有test

答案 1 :(得分:1)

如果你想让AnotherClass拥有它独立的,空的3D阵列实例,那么你可以做Pikoh所说的。在这种情况下,如果更改数组的内容,则在Main中创建的原始数组不受影响,反之亦然。

如果你希望AnotherClass引用与在Main中创建的数组相同的数组,并且因此可以访问它,填充内容,那么只需在AnotherClass构造函数中将AnotherClass.anotherClassArray引用设置为等于fromAnArray像这样:

public AnotherClass (string[,,] fromAnArray)
{
   anotherClassArray = fromAnArray;
}