次のC#スニペットは、私のVisualStudio2010でコンパイルおよび実行されます。
struct Foo {
public int A;
}
// ..
var foo = new Foo { A = 1, };
オブジェクト初期化子の末尾のコンマに注意してください。
これは合法的なC#であり、有用な目的がありますか、それとも(良性の)コンパイラのバグに遭遇したばかりですか?
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?
最後の項目をコメントアウトするとコンパイルエラーが発生した場合は、煩わしいでしょう。
var f = new Foo {
A = 1,
// B = 4
};
[Flags]
enum Characteristics
{
None = 0,
Big = 1,
// Strong = 2
}
var primes = new int[] {
2,
3,
// 5
};
はいその合法であり、特定の目的はありません。