Я не согласен с Дарином: они не эквивалент с точки зрения производительности. Последняя версия должна создать новый массив, и ToList
затем скопирует его в новый список. Версия коллекции инициализатора эквивалентна:
var tmp = new List<int>();
tmp.Add(1);
tmp.Add(2);
tmp.Add(3);
var ints = tmp;
Предполагая, что список начинается с достаточно большим буфером, который не будет требовать дальнейшего распределения - хотя будет включать несколько вызовов методов. Если вы сделаете это за очень большое количество , то потребуется больше ассигнований, чем ToList
, так как оно скопирует элементы по мере их поступления.
Разница в производительности является, вероятно, будет незначительным, но это не ноль (а не четко лучше в любом направлении - есть меньше вызовов в версии массива, но больше распределения).
Я бы больше сосредоточился на стиле, чем на рабочем месте, если у вас нет причин подозревать, что разница значительна, и в этом случае вы должны измерить, а не просто гадать.
Лично я предпочитаю первую форму - я думаю, что она дает понять, что вы используете список с самого начала. Другой альтернативой было бы написать свой собственный статический класс:
public static class Lists
{
public static List<T> Of<T>(T item0)
{
return new List<T> { item0 };
}
public static List<T> Of<T>(T item0, T item1)
{
return new List<T> { item0, item1 };
}
public static List<T> Of<T>(T item0, T item1, T item2)
{
return new List<T> { item0, item1, item2 };
}
... as many times as you really care about, then ...
public static List<T> Of<T>(params T[] items)
{
return items.ToList();
}
}
Тогда вы можете написать:
var ints = Lists.Of(1);
var ints = Lists.Of(1, 2, 3);
var ints = Lists.Of(1, 2, 3, 5, 6, 7, 8); // Use the params version
Это все еще дает понять, что вы используете списки, но имеет преимущество логического вывода типа.
Вы можете хорошо рассмотреть его излишеством, хотя :)
Я также предпочитаю 2-й стиль – Magrangs
почему вы предпочитаете второй стиль? Я думаю, что это менее читаемо, особенно при использовании 'var'. –
Вы пробовали какие-то тесты производительности на нем? просто время и сделайте это в 100 раз, чтобы увидеть значения avarage из этого теста. – Frederiek