宣言するのと同じ行でC#リストを初期化するにはどうすればよいですか。(IEnumerable文字列コレクションの例)


107

私はテストコードを書いていますが、書きたくありません:

List<string> nameslist = new List<string>();
nameslist.Add("one");
nameslist.Add("two");
nameslist.Add("three");

書きたい

List<string> nameslist = new List<string>({"one", "two", "three"});

ただし、{"one"、 "two"、 "three"}は、「IEnumerable string Collection」ではありません。IEnumerable文字列コレクションを使用して、これを1行でどのように初期化できますか?」

回答:


168
var list = new List<string> { "One", "Two", "Three" };

基本的に構文は次のとおりです。

new List<Type> { Instance1, Instance2, Instance3 };

コンパイラによって次のように翻訳されます

List<string> list = new List<string>();
list.Add("One");
list.Add("Two");
list.Add("Three");

私はこの括弧なしの方法が好きです、それはどのc#バージョンで始まりましたか?
SilverbackNet

9
少なくとも一般的には、それは完全には翻訳されていません。変数への代入はすべてのAdd呼び出しが行われた後に行われlist = tmp;ます。これは、最後に一時変数を使用しているかのようです。これは、変数の値を再割り当てする場合に重要になる可能性があります。
Jon Skeet、2010

自動プロパティとオブジェクト初期化子は.NET 3で導入されたと思います。これは同じフレームワークバージョンであり、LINQをサポートするために更新されたコンパイラーにすぎません。
Matthew Abbott、

@ジョン、乾杯、私はその部分を知りませんでした。:D
マシュー・アボット、

@Jon Skeet: "...これは、変数の値を再割り当てする場合に重要になる可能性があります。" この発言についてもう少し説明してもらえますか?
Tony

17

コードを次のように変更します

List<string> nameslist = new List<string> {"one", "two", "three"};

または

List<string> nameslist = new List<string>(new[] {"one", "two", "three"});

2行目「List <string> nameslist = new List <string>(new [] {"one"、 "two"、 "three"});を使用する目的は何ですか?いつ使用できますか?また、2番目の構文での「new [] {...}」の意味は何ですか。なぜ新しいキーワードが括弧[]とともに使用されるのですか???
トニー




3

これは、使用しているC#のバージョンによって異なります。バージョン3.0以降では、使用できます...

List<string> nameslist = new List<string> { "one", "two", "three" };

1

これは、int、long、およびstring値で機能すると思います。

List<int> list = new List<int>(new int[]{ 2, 3, 7 });


var animals = new List<string>() { "bird", "dog" };

0

これは片道です。

List<int> list = new List<int>{ 1, 2, 3, 4, 5 };

これは別の方法です。

List<int> list2 = new List<int>();

list2.Add(1);

list2.Add(2);

文字列も同様です。

例えば:

List<string> list3 = new List<string> { "Hello", "World" };
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.