En C#, puedo inicializar una lista con la siguiente sintaxis.Inicialización de una lista genérica en C#
List<int> intList= new List<int>() { 1, 2, 3 };
me gustaría saber cómo funciona esa sintaxis {}
, y si tiene un nombre. Hay un constructor que toma un IEnumerable
, puede llamar eso.
List<int> intList= new List<int>(new int[]{ 1, 2, 3 });
que parece más "estándar". Cuando deconstruo el constructor predeterminado para la Lista, solo veo
this._items = Array.Empty;
Me gustaría poder hacer esto.
CustomClass abc = new CustomClass() {1, 2, 3};
Y poder utilizar la lista 1, 2, 3
. ¿Como funciona esto?
actualización
Jon Skeet respondió
Está llamando al constructor sin parámetros , y luego llamar Añadir:
> List<int> tmp = new List<int>();
> tmp.Add(1); tmp.Add(2); tmp.Add(3);
> List<int> intList = tmp;
entiendo lo que es lo hace. Quiero saber cómo. ¿Cómo sabe esa sintaxis para llamar al método Agregar?
actualización
lo sé, cómo cliché para aceptar una respuesta Jon Skeet. Pero, el ejemplo con las cuerdas y los puntos es increíble. También una página muy útil es de MSDN:
Qué vergüenza los argumentos fueron al revés, pero se corrigieron ahora :) –
Entonces, ¿por qué le importa que el tipo sea enumerable? no parece agregar nada más que hacer que C# sea más consciente de .NET, similar a IDisposable ... me hace preguntarme por qué foreach requiere SOLO una firma compatible, y no interfaces. Pensé que la idea era que C# no sería específicamente vinculado a un 'lang' – meandmycode
@meandmycode: foreach no está vinculado a IEnumerable porque pre-genéricos no había otra manera de exponer un iterador sin boxeo. Con genéricos, estoy seguro de que se habría * solo * confiado en IEnumerable. (Continuación) –