No estoy de acuerdo con Darin: son no equivalente en términos de rendimiento. La última versión tiene que crear una nueva matriz, y ToList
la copiará en la nueva lista. La versión recogida inicializador es equivalente a:
var tmp = new List<int>();
tmp.Add(1);
tmp.Add(2);
tmp.Add(3);
var ints = tmp;
Asumiendo la lista comienza con un buffer lo suficientemente grande, que no requerirá ninguna nueva asignación - a pesar de que se implican un par de llamadas a métodos. Si hace esto para un número muy grande , entonces requerirá más asignaciones que la versión ToList
, porque copiará los elementos como va.
La diferencia de rendimiento es probable que sea insignificante, pero es distinto de cero (y no claramente mejor en cualquier dirección - hay un menor número de llamadas en la versión de serie, pero más de la asignación).
Me concentraría más en el estilo que en el rendimiento a menos que tenga una razón para sospechar que la diferencia es significativa, en cuyo caso debe medir en lugar de adivinar.
Personalmente prefiero el primer formulario, creo que aclara que está utilizando una lista desde el principio. Otra alternativa sería la de escribir su propia clase estática:
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();
}
}
entonces usted puede escribir:
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
Esto todavía deja claro que está utilizando las listas, pero se aprovecha de la inferencia de tipos.
Usted también puede considerar que una exageración aunque :)
también prefiero el segundo estilo – Magrangs
¿por qué prefiere la segunda ¿estilo? Creo que es menos legible, especialmente cuando se usa 'var'. –
¿Has probado algunas pruebas de rendimiento? simplemente cronometralo y hazlo 100 veces para ver los valores de avarage de esa prueba. – Frederiek