Câu trả lời ngắn gọn là không.
Câu trả lời dài hơn: Để một lớp hỗ trợ trình khởi tạo bộ sưu tập, nó cần triển khai IEnumerable và cần phải có phương thức bổ sung. Vì vậy, ví dụ:
public class MyClass<T,U> : IEnumerable<T>
{
public void Add(T t, U u)
{
}
public IEnumerator<T> GetEnumerator()
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Sau đó tôi có thể làm điều này:
var mc = new MyClass<int, string> {{1, ""}, {2, ""}};
Vì vậy, sử dụng này, chúng ta hãy cố gắng để làm cho nó làm việc cho một thuộc tính. (Mặt lưu ý, vì các thuộc tính không hỗ trợ Generics, tôi chỉ hardcoding nó sử dụng dây để thử nghiệm):
public class CollectionInitAttribute : Attribute, IEnumerable<string>
{
public void Add(string s1, string s2)
{
}
public IEnumerator<string> GetEnumerator()
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Và bây giờ để kiểm tra nó:
[CollectionInit{{"1","1"}}]
public class MyClass
{
}
và điều đó không biên dịch :(Tôi không chắc chắn nơi giới hạn là chính xác, tôi đoán thuộc tính không phải là mới lên cùng một cách một đối tượng thường xuyên và do đó điều này không được hỗ trợ. Tôi muốn tò mò nếu điều này về mặt lý thuyết có thể được hỗ trợ bởi một phiên bản tương lai của ngôn ngữ ....
Scott, Xin lỗi - câu trả lời của tôi không thành công. Tôi không kiếm được phiếu bầu. Hãy bình chọn xuống cos chơi công bằng của nó. – vladimir77
@ vladimir77 - Bạn không nên xóa câu trả lời của mình! Đôi khi câu trả lời sai vẫn hữu ích ... chỉ cần cập nhật câu trả lời của bạn lần sau, để mọi người có thể hiểu tại sao nó sai. –
Ok. :) Ive khôi phục lại nó. – vladimir77