在类中设置锯齿状数组值

时间:2013-08-22 19:30:30

标签: c# arrays instantiation

我在使用C#创建锯齿状数组时无法理解这个问题。如果你看下面的代码,它编译得很好。但是,如果我将2行分配给数组“places”并将它们从方法中移到类本身内,编译器会开始抱怨很多奇怪的错误。

起初我认为这是因为在一个类中使用了'new'关键字(一个类只是一个定义,而'new'是指一个实例...你不能在一个定义中有一个实例, 你能?)。但后来我注意到在“places”的初始化中使用'new'关键字即使在类中初始化也没问题。请解释一下。

public class Place
{
string[][] places = new string[2][];
   public void enumerate()
   {
     places[0] = new string[] { "Canada", "United States" };
     places[1] = new string[] { "Calgary", "Edmonton", "Toronto" };

     Console.WriteLine(places[0][1]);
   }
}

编辑:显而易见,运行

时会产生错误
public class Place
{
string[][] places = new string[2][];
places[0] = new string[] { "Canada", "United States" };
places[1] = new string[] { "Calgary", "Edmonton", "Toronto" };
   public void enumerate()
   {
     Console.WriteLine(places[0][1]);
   }
}
收到

错误“无法在变量声明中指定数组大小(尝试使用”new“表达式初始化)”“无效的tokens =,{,在类”“命名空间中不能直接包含诸如字段或方法之类的成员”

1 个答案:

答案 0 :(得分:3)

当然你可以初始化一个锯齿状数组,但语法略有不同:

public class Place
{
    private string[][] places = new string[2][]
    {
        new string[] { "Canada", "United States" },
        new string[] { "Calgary", "Edmonton", "Toronto" },
    };

    public void enumerate()
    {
        Console.WriteLine(places[0][1]);
    }
}