Các mã sau biên dịch, nhưng không thành công với một NullReferenceException
:C# từ điển initializer biên soạn mâu thuẫn
class Test
{
public Dictionary<string, string> Dictionary { get; set; }
}
static void Main(string[] args)
{
var x = new Test
{
Dictionary = // fails
{
{ "key", "value" }, { "key2", "value2" }
}
};
}
Nếu bạn thay thế dòng được đánh dấu 'không' với những điều sau đây, nó hoạt động (như dự kiến):
Dictionary = new Dictionary<string, string>
Có bất kỳ mục đích nào với cú pháp không thành công - nó có thể được sử dụng thành công trong một số trường hợp khác không? Hay đây là một sự giám sát trong trình biên dịch?
Vì vậy, nó được sử dụng để thêm các mục vào một từ điển được tạo bởi hàm tạo - tôi đã nhận ra điều đó. Nhưng đó là một sử dụng kỳ lạ của toán tử equals, vì hiệu ứng là để thêm vào bất cứ điều gì đã có trong từ điển (constructor có thể đã thêm các mục đầu tiên). –
Sắp xếp, có ... nhưng đồng thời nó được sử dụng để thiết lập các giá trị ban đầu trong bộ sưu tập, do đó, nó phù hợp theo cách đó. –
Phải. Thiếu 'new' phải là cờ đỏ .. nhưng chưa bao giờ sử dụng cú pháp này, tôi lấy toán tử equals theo nghĩa đen. –