web-dev-qa-db-ja.com

単一のオブジェクトとオブジェクトの別のリストの両方でリストを初期化する

オブジェクトのリストとその特定の順序でオブジェクトのリストを初期化したいと思います。現在、私はやっています:

List<MyObject> list = new List<MyObject>();
list.Add(object1); // object1 is type MyObject
list.AddRange(listOfObjects); // listOfObjects is type List<MyObject>

私はそれを初期化ステートメントに統合することを望んでいました(もちろん構文は間違っています):

List<MyObject> newList = new List<MyObject>() { object1, listOfObjects };

これを簡潔に行う方法はありますか?

25
Joe W

要素の順序が重要でない場合は、以下を使用できます。

List<MyObject> newList = new List<MyObject>(listOfObjects) { object1 };

これはList<T>を受け入れるコンストラクターIEnumerable<T>、次に、他のアイテムを追加するためのコレクション初期化子。たとえば、次のとおりです。

static void Main()
{
    int test = 2;
    List<int> test2 = new List<int>() { 3, 4, 5 };
    List<int> test3 = new List<int>(test2) { test };

    foreach (var t in test3) Console.WriteLine(t);

    Console.ReadKey();
}

印刷されます:

3
4
5
2

ただし、個別のアイテムが追加されるため、順序は元のアイテムとは異なりますlast

ただし、順序が重要な場合は、個人的にリストを作成し、初期化子の最初のオブジェクトに配置して、AddRangeを呼び出します。

List<MyObject> newList = new List<MyObject> { object1 };
newList.AddRange(listOfObjects);

これにより、意図が非常に明確になり、(LINQのConcatなどを使用して必要になる)一時的なアイテムの構築が回避されます。

34
Reed Copsey

私はあなたができる最高のことだと思います:

List<MyObject> newList = new[] { object1 }.Concat(listOfObjects).ToList();
9
Lee