Инициализировать список как с одним объектом, так и с другим списком объектов
Я хочу инициализировать список с объектом и списком объектов в этом определенном порядке. В настоящее время я делаю:
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 };
есть ли способ сделать это лаконично?
2 ответов
если порядок элементов не важен, можно использовать:
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 и т. д.).
Я думаю, лучшее, что вы можете сделать, это:
List<MyObject> newList = new[] { object1 }.Concat(listOfObjects).ToList();