これを実行すると奇妙なエラーが発生します: (.net 2.0)
public overrides List<String> getSpaceballs
{
get { return new List<String>() { "abc","def","egh" }; }
}
VS は;
afterを要求しています()
。なぜですか?
確かにこれはできます:
public overrides string[] getSpaceballs
{
get { return new string[] { "abc","def","egh" }; }
}
ベストアンサー1
C#のコレクション初期化構文バージョン 3 以上でのみサポートされています (.NET 2.0 について言及されているので、C# 2 も使用しているものと想定します)。C# は配列の初期化に常に同様の構文をサポートしているため、少し混乱する可能性がありますが、実際には同じものではありません。
コレクション初期化子は、次のように 1 つのステートメントでコレクションを作成して初期化できるコンパイラ トリックです。
var list = new List<String> { "foo", "bar" };
ただし、このステートメントはコンパイラによって次のように翻訳されます。
List<String> <>g__initLocal0 = new List<String>();
<>g__initLocal0.Add("foo");
<>g__initLocal0.Add("bar");
List<String> list = <>g__initLocal0;
ご覧のとおり、この機能はパターンを単一の式に簡略化するちょっとした構文糖です。