이것은 .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을 참조하십시오 )