Đây là một phần của cú pháp khởi tạo bộ sưu tập trong .NET. Bạn có thể sử dụng cú pháp này trên bất kỳ bộ sưu tập nào bạn tạo miễn là:
Điều gì xảy ra là hàm tạo mặc định được gọi, và sau đó Add(...)
được gọi cho mỗi thành viên của trình khởi tạo.
Do đó, hai khối này giống hệt nhau:
List<int> a = new List<int> { 1, 2, 3 };
Và
List<int> temp = new List<int>();
temp.Add(1);
temp.Add(2);
temp.Add(3);
List<int> a = temp;
Bạn có thể gọi một hàm tạo thay thế nếu bạn muốn, ví dụ để ngăn quá kích thước List<T>
trong quá trình phát triển, v.v .:
// 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, }
Lưu ý rằng Add()
phương thức không cần lấy một mục, ví dụ: Add()
phương thức Dictionary<TKey, TValue>
lấy hai mục:
var grades = new Dictionary<string, int>
{
{ "Suzy", 100 },
{ "David", 98 },
{ "Karen", 73 }
};
Gần giống với:
var temp = new Dictionary<string, int>();
temp.Add("Suzy", 100);
temp.Add("David", 98);
temp.Add("Karen", 73);
var grades = temp;
Vì vậy, để thêm phần này vào lớp của riêng bạn, tất cả những gì bạn cần làm, như đã đề cập, là triển khai IEnumerable
(một lần nữa, tốt nhất là IEnumerable<T>
) và tạo một hoặc nhiều Add()
phương thức:
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();
}
}
Sau đó, bạn có thể sử dụng nó giống như các bộ sưu tập BCL làm:
public class MyProgram
{
private SomeCollection<int> _myCollection = new SomeCollection<int> { 13, 5, 7 };
// ...
}
(Để biết thêm thông tin, xem MSDN )