这是.NET中集合初始化器语法的一部分。您可以在创建的任何集合上使用此语法,只要:
发生的情况是调用了默认构造函数,然后Add(...)
为初始化器的每个成员调用了该构造函数。
因此,这两个块大致相同:
List<int> a = new List<int> { 1, 2, 3 };
和
List<int> temp = new List<int>();
temp.Add(1);
temp.Add(2);
temp.Add(3);
List<int> a = temp;
您可以根据需要调用备用构造函数,例如,防止List<T>
在增长期间过大,等等:
// 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, }
请注意,该Add()
方法不必采用单个项目,例如,用于的Add()
方法可以Dictionary<TKey, TValue>
采用两个项目:
var grades = new Dictionary<string, int>
{
{ "Suzy", 100 },
{ "David", 98 },
{ "Karen", 73 }
};
大致等同于:
var temp = new Dictionary<string, int>();
temp.Add("Suzy", 100);
temp.Add("David", 98);
temp.Add("Karen", 73);
var grades = temp;
因此,要将其添加到您自己的类中,如上所述,您所需要做的就是实现IEnumerable
(再次,最好是IEnumerable<T>
)并创建一个或多个Add()
方法:
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();
}
}
然后,您可以像BCL集合一样使用它:
public class MyProgram
{
private SomeCollection<int> _myCollection = new SomeCollection<int> { 13, 5, 7 };
// ...
}
(有关更多信息,请参见MSDN)