2012-05-12 62 views
0

我無法理解這兩個奇怪的行爲爲什麼這種奇怪的行爲?

1.首先行爲

我已經聲明如下

double[][] dd = 
{ 
    new double[10], 
    new double[10] 
}; 

它不給錯誤的變量。

但是,如果我不喜歡這一點,給人如果我這樣做

double[][] dd; 

dd = new double[][]{ 
        new double[10], 
        new double[10] 
        }; 

爲什麼錯誤

double[][] dd; 

dd = { // Here it gives 2 errors says Invalid Expression { and ; expected 
     new double[10], 
     new double[10] //Here and in the above line it says only 
        //assignment, call, increment....can be used as a statement 
    }; 

錯誤沒有了嗎?

2.第二行爲

更多了,如果一個逗號,是數組的最後一個元素之後放在任何

{ 
new double[10], 
new double[10], //This comma here is not given as error. Why? 
}; 

應該就是多餘的逗號沒有上述情況下並非如此錯誤指定應在其後添加一個實體。

回答

4

相當老的文檔,但仍然相關。你在尋找什麼是Array Initializers

陣列初始化可以在域聲明(第10.4節),局部變量聲明(第8.5.1節),並陣列創建表達式(第7.5節指定.10.2)。

注意,它不說,他們在賦值語句有空,這是你與你的第一個錯誤嘗試的東西。


你的第二個問題,爲什麼額外,是允許的理由是方便 - 如果正在編程生成的代碼,如果你沒有特殊的情況下,第一個或最後一個項目是特別有用。例如,你會發現類似的語法。枚舉聲明。

1
  1. 您的示例是C#的Array Initializer語法的示例。初始化表達式只能出現在定義變量的行上。它看起來像你期待{}符號很像Python或Ruby的[]數組文字表達式。他們不是真的。

  2. 它允許使用尾隨逗號來簡化更簡單的工作,使您的初始化程序中的項目列表隨着時間的推移而變化。例如,由於您在那裏有逗號,因此在最後添加新項目只需編輯一行,而不是編輯一行以添加逗號,而另一行添加新內容。

相關問題