Đâ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 bạn tạo miễn là:
gì sẽ xảy ra là constructor mặc định được gọi, và sau đó Add(...)
được gọi cho mỗi thành viên của bộ khởi tạo.
Như vậy, hai khối này là xấp xỉ 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 thể gọi một constructor thay thế nếu bạn muốn, ví dụ để ngăn chặn quá kích thước các List<T>
trong đang 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 phương pháp Add()
không cần phải mất một mục duy nhất, ví dụ như phương pháp Add()
cho Dictionary<TKey, TValue>
mất hai mục:
var grades = new Dictionary<string, int>
{
{ "Suzy", 100 },
{ "David", 98 },
{ "Karen", 73 }
};
là xấp xỉ 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 video này của bạn lớp riêng, 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 phương thức 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();
}
}
Sau đó, bạn có thể sử dụng nó giống như những 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, vui lòng xem MSDN)
Câu hỏi này có thể trợ giúp: http://stackoverflow.com/questions/1744967/in-c-is-there-a-way-to-write-custom-object-initializers-for-new-data- các loại –
Khá tuyệt vời huh? Bạn cũng có thể thực hiện mã rất giống để khởi tạo từ điển: '{{" key1 "," value1 "}, {" key2 "," value2 "}}' – danludwig
Từ một khung nhìn khác mảng này giống như cú pháp khởi tạo cho chúng ta một lời nhắc rằng kiểu dữ liệu của một 'Danh sách' thực ra chỉ là một mảng. Tôi ghét đội C# vì thực tế là họ không đặt tên cho nó là 'ArrayList ' có vẻ rất rõ ràng và tự nhiên. –
RBT