5

次のC#スニペットは、私のVisualStudio2010でコンパイルおよび実行されます。

struct Foo {
    public int A;
}

// ..

var foo = new Foo { A = 1, };

オブジェクト初期化子の末尾のコンマに注意してください。

これは合法的なC#であり、有用な目的がありますか、それとも(良性の)コンパイラのバグに遭遇したばかりですか?

4

3 に答える 3

9

Yes it is very much legal and useful in C# to have trailing commas and no it is not a (benign) compiler bug.

Microsoftは、便宜上この機能を追加しました。最初または最後の項目を特別なケースにする必要がない場合に、コードがプログラムで生成されている場合に特に便利です。列挙型宣言、オブジェクトの初期化、配列、リストなどでのプロパティの割り当てにも同様の構文があります。

これにより、末尾のコンマを使用して、時間の経過とともに長さが変化するイニシャライザーに入るアイテムのリストをより均一にすることができます。たとえば、そこにカンマがあるので、最後に新しいアイテムを追加するには、1行を編集するだけで、1行を編集してカンマを追加し、別の行を編集して新しいコンテンツを追加する必要はありません。

さらに、最後のオプションをコメントアウトするとどうなりますか

enum Cars
{
   Honda,
   Hyundai,
   //Ford
}

.NETのJonSkeetの回答を参照してください。Pythonのように配列の末尾のコンマがサポートされるようになりました

Food for thought: If it had no use why would it be there in the first place?

于 2012-05-24T12:29:19.307 に答える
4

最後の項目をコメントアウトするとコンパイルエラーが発生した場合は、煩わしいでしょう。

var f = new Foo {
    A = 1,
//  B = 4
};

[Flags]
enum Characteristics
{
    None = 0,
    Big = 1,
//  Strong = 2
}

var primes = new int[] {
    2,
    3,
//  5
};
于 2012-05-24T12:33:27.687 に答える
0

はいその合法であり、特定の目的はありません。

于 2012-05-24T12:39:16.967 に答える