Cela fait partie de la syntaxe d'initialisation de collection dans .NET. Vous pouvez utiliser cette syntaxe sur n'importe quelle collection que vous créez tant que:
Ce qui se passe, c'est que le constructeur par défaut est appelé, puis Add(...)
est appelé pour chaque membre de l'initialiseur.
Ainsi, ces deux blocs sont à peu près identiques:
List<int> a = new List<int> { 1, 2, 3 };
Et
List<int> temp = new List<int>();
temp.Add(1);
temp.Add(2);
temp.Add(3);
List<int> a = temp;
Vous pouvez appeler un constructeur alternatif si vous le souhaitez, par exemple pour éviter de surdimensionner le List<T>
pendant la croissance, etc.:
// Notice, calls the List constructor that takes an int arg
// for initial capacity, then Add()'s three items.
List<int> a = new List<int>(3) { 1, 2, 3, }
Notez que la Add()
méthode n'a pas besoin de prendre un seul élément, par exemple la Add()
méthode pour Dictionary<TKey, TValue>
prend deux éléments:
var grades = new Dictionary<string, int>
{
{ "Suzy", 100 },
{ "David", 98 },
{ "Karen", 73 }
};
Est à peu près identique à:
var temp = new Dictionary<string, int>();
temp.Add("Suzy", 100);
temp.Add("David", 98);
temp.Add("Karen", 73);
var grades = temp;
Donc, pour ajouter ceci à votre propre classe, tout ce que vous avez à faire, comme mentionné, est d'implémenter IEnumerable
(encore une fois, de préférence IEnumerable<T>
) et de créer une ou plusieurs Add()
méthodes:
public class SomeCollection<T> : IEnumerable<T>
{
// implement Add() methods appropriate for your collection
public void Add(T item)
{
// your add logic
}
// implement your enumerators for IEnumerable<T> (and IEnumerable)
public IEnumerator<T> GetEnumerator()
{
// your implementation
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Ensuite, vous pouvez l'utiliser comme le font les collections BCL:
public class MyProgram
{
private SomeCollection<int> _myCollection = new SomeCollection<int> { 13, 5, 7 };
// ...
}
(Pour plus d'informations, consultez le MSDN )