2013-08-22 111 views
0

我无法理解在C#中创建锯齿阵列的问题。如果你看下面的代码,它编译得很好。但是如果我将两行分配给数组“位置”的值并将它们从方法内移到类本身内,编译器就会开始抱怨出现很多奇怪的错误。在类中设置锯齿阵列值

起初我以为它是因为在一个类中使用'new'关键字(一个类只是一个定义,而'new'是指一个实例......你不能在一个实例中有一个实例定义,你能吗?)。但后来我注意到,在“位置”初始化中使用'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]); 
    } 
} 

错误“(新的‘表达阵列大小不能在一个变量声明尝试用初始化)’指定的”,“时产生的误差无效令牌= {,在类”‘命名空间不能直接包含成员如字段或方法’

+0

为什么你会使用锯齿阵列呢?它最好作为类对象。 – OneFineDay

+0

我不确定你的意思。忽略所使用的值的含义。这是一个完全没有意义的数组。我只是想知道为什么它不会编译。 – Snik

+0

如何不编译?它为我输出=“美国”。 – OneFineDay

回答

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]); 
    } 
} 
+0

那么,解决这个问题。谢谢。我仍然模糊为什么这是一个数组的特殊情况?我不熟悉你使用的语法(封装数组)。 – Snik

+0

这是只是数组声明和初始化的语法,一些例子[here](http://msdn.microsoft.com/en-us/library/aa288453(v = vs.71).aspx) – Alberto

+0

谢谢Alberto。我想这只是它用数组完成的方式,我会习惯于语法。 – Snik