2013-08-22 155 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