多くの文字列値を持つ文字列のリスト(List <string>)を初期化する方法


358

文字列のリストを(C#イニシャライザーで)初期化するにはどうすればよいですか?以下の例を試してみましたが、機能しません。

List<string> optionList = new List<string>
{
    "AdditionalCardPersonAddressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
}();

例は、この質問への答えで多次元リストのためにここにありますstackoverflow.com/questions/34473358/...
barlop

回答:


464
List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });

150
このオブジェクトを作成するためにここで文字列配列を初期化する正当な理由はないと思います。探している人は誰でも、他の回答のいずれかを使用してください。
ロバート・スミス

2
@Unslicedと@Padelの方が正解が多いです。new初期化した場合、別のものを渡す必要はありません{ }
Don Cheadle

C ++ CLIの場合は、次のようになりますCollections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
。– Rostfrei

@Bobrotなんで?を割り当てるのnew String[]は効率的ではないからですか?
Dylan Czenski 2016

8
@DylanChensky原則として、不必要なことを行うのは非効率的です。確かに、この1つのインスタンスは大した問題ではないかもしれませんが、コードにこのようなアイテムが散らばっていると想像してください。特にメモリ使用量に関しては、全体的に大きな違いが生じる可能性があります。
Robert Smith

557

()最後に削除するだけです。

List<string> optionList = new List<string>
            { "AdditionalCardPersonAdressType", /* rest of elements */ };

4
@Oded:msdn.microsoft.com/en-us/library/bb384062.aspx "Collection initializers"
Lucero

.NET / C#の特定のバージョンを参照していますか?私の知る限り、この作業はv3.5以降で行われます。2.0をしばらく使用していないので、2.0について知らない...
Padel

1
asp.net 2.0 btw後にエラーが発生します{->エラー7新しい式には、タイプの後に()または[]が必要です
BilginKılıçJun

4
2.0では、次のように使用する必要がありますList<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };。ここに注意して()ください:new List<string>()
Padel

3
これはC#3言語機能であり、使用しているフレームワークのバージョンとは関係ありません。Visual Studio 2005をまだ使用している場合は、この機能を使用できません。
Phil Gan

145

実際には質問していませんが、コードは

List<string> optionList = new List<string> { "string1", "string2", ..., "stringN"}; 

つまり、リストの後に()を付けません。


エラー7新しい式では、タイプの後に()または[]が必要です
BilginKılıçJun

2
@blgnklc、この機能をサポートしていないC#2を使用しているため。
Phil Gan

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

上記の2つは最短の方法です。https://www.dotnetperls.com/listを参照してください


1
これは受け入れられた回答よりも優先されますか?中間体を必要とせず、よりシンプルに見えますstring[]
Ehtesh Choudhury

var animals = new List<string> { "bird", "dog" };受け入れられた回答では提案されませんでした。さらに(new string[]、回避することができる受け入れられた回答の追加コマンドがあります。
Sujoy

14

あなたの関数はうまくいきますが、あなた()が最後にを置いたので機能していません}。あなたが()すぐ横の一番上に移動するとnew List<string>()エラーが止まります。

以下のサンプル:

List<string> optionList = new List<string>()
{
    "AdditionalCardPersonAdressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
};

7

これは初期化方法であり、さらに動的にする場合はList.Add()を使用できます。

List<string> optionList = new List<string> {"AdditionalCardPersonAdressType"};
optionList.Add("AutomaticRaiseCreditLimit");
optionList.Add("CardDeliveryTimeWeekDay");

このようにして、IOから値を取得する場合、動的に割り当てられたリストに追加できます。


2

次のように角かっこを移動します。

var optionList = new List<string>(){"AdditionalCardPersonAdressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"};

0

本当にすばらしい機能の1つは、リスト初期化子がカスタムクラスでも問題なく機能することです。IEnumerableインターフェイスを実装し、Addというメソッドを用意するだけです。

たとえば、次のようなカスタムクラスがあるとします。

class MyCustomCollection : System.Collections.IEnumerable
{
    List<string> _items = new List<string>();

    public void Add(string item)
    {
        _items.Add(item);
    }

    public IEnumerator GetEnumerator()
    {
        return _items.GetEnumerator();
    }
}

これは動作します:

var myTestCollection = new MyCustomCollection()
{
    "item1",
    "item2"
}

-1
List<string> animals= new List<string>();
animals.Add("dog");
animals.Add("tiger");

3
してください追加あなたの答えに、いくつかの説明を
mechnicov

申し訳ありませんが、問題は複数の値でリストを初期化することです。これは文字列を初期化し、それから値を追加しますが、同じケースではありません。
c-chavez

-8

これがあなたのやり方です。

List <string> list1 = new List <string>();

追加することを忘れないでください

using System.Collections.Generic;

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.