En C#, je peux initialiser une liste en utilisant la syntaxe suivante.Initialisation d'une liste générique en C#
List<int> intList= new List<int>() { 1, 2, 3 };
Je voudrais savoir comment cette syntaxe {}
fonctionne, et si elle a un nom. Il y a un constructeur qui prend un IEnumerable
, vous pourriez appeler ça.
List<int> intList= new List<int>(new int[]{ 1, 2, 3 });
Cela semble plus "standard". Lorsque je déconstruis le constructeur par défaut pour la liste, je ne vois que
this._items = Array.Empty;
Je voudrais pouvoir le faire. Vous pouvez utiliser la liste 1, 2, 3
. Comment cela marche-t-il?
Mise à jour
Jon Skeet a répondu
qu'il appelle le constructeur parameterless, puis appeler Ajouter:
> List<int> tmp = new List<int>();
> tmp.Add(1); tmp.Add(2); tmp.Add(3);
> List<int> intList = tmp;
Je comprends ce qui est fait. Je veux savoir comment. Comment cette syntaxe sait-elle appeler la méthode Add?
Mise à jour
Je sais, comment accepter cliche une réponse Jon Skeet. Mais, l'exemple avec les cordes et les ints est génial. Aussi une page MSDN très utile est:
Dommage que les arguments aient été inversés - mais corrigés maintenant :) –
Alors, pourquoi est-ce que le type est énumérable? il ne semble pas ajouter autre chose que de rendre C# plus conscient de .NET, similaire à IDisposable .. me fait me demander pourquoi foreach nécessite juste une signature compat, et non des interfaces .. Je pensais que l'idée était si C# ne serait pas spécifiquement lié à un 'lang' – meandmycode
@meandmycode: foreach n'est pas lié à IEnumerable car les pré-génériques il n'y avait pas d'autre moyen d'exposer un itérateur sans boxe. Avec les génériques, je suis sûr que ça aurait * juste * reposé sur IEnumerable. (Suite) –