Подтвердить что ты не робот

Инициализировать список как с одним объектом, так и с другим списком объектов

Я хочу инициализировать список с объектом и списком объектов в этом конкретном порядке. В настоящее время я делаю:

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 };

Есть ли способ сделать это кратко?

4b9b3361

Ответ 1

Если порядок элементов не важен, вы можете использовать:

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

Обратите внимание, что порядок отличается от вашего оригинала, однако, поскольку отдельный элемент добавляется последним.

Если порядок важен, я бы лично просто создал список, разместив в своем первом объекте в инициализаторе и вызвав AddRange:

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

Это делает цель очень четкой и позволяет избежать создания временных элементов (которые потребуются с помощью LINQ Concat и т.д.).

Ответ 2

Я думаю, что лучшее, что вы можете сделать, это:

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