リストをインラインで初期化する 質問する

リストをインラインで初期化する 質問する

これを実行すると奇妙なエラーが発生します: (.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;

ご覧のとおり、この機能はパターンを単一の式に簡略化するちょっとした構文糖です。

おすすめ記事