2012-05-12 19 views
0

私はそれがエラーを与えるものではありません。このなぜこの奇妙な動作ですか?私はこれらの2奇妙な行動</p> <p><strong>1.まず行動</strong></p> <p>を理解することはできません

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.第2行動

余分なコンマ,

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

べきであると、余分なコンマない上記のいずれかの場合に、配列の最後の要素の後に置かれている場合、それはエラーがない上もっと後にもう1つのエンティティを追加する必要があることを指定します。

答えて

4

かなり古いドキュメントですが、それでも関連します。 フィールド宣言(10.4)、ローカル変数宣言(セクション8.5.1)、および配列作成式を(7.5節で指定することができるArray Initializers

配列初期化子は何を見ているされています.10.2)。

注意、それはあなたが最初のエラーで試行しているものである、彼らは代入文で利用していると言うことはありません。 2番目の質問に


、余分,が許可されている理由は便利です - あなたは特殊なケースに最初または最後の項目を持っていない場合は、コードをプログラムで生成されている場合には特に便利です。たとえば、次のような構文があります。 enum宣言。

1
  1. あなたの例は、C#のArray Initializer構文の例です。イニシャライザの式は、変数を定義する行でのみ発生します。 {}の記法がPythonやRubyの[]の配列リテラル式に似ていると期待しているようです。彼らは本当にありません。

  2. これは、後続のコンマを使用することで、イニシャライザの長さが変わるアイテムのリストをより簡単にすることができます。たとえば、コンマがあるので、最後に新しい項目を追加するには、1行を編集し、1行を編集してコンマを追加したり、別の行で新しいコンテンツを追加したりしないでください。

関連する問題