Như bạn đã biết, nó không được phép sử dụng cú pháp-Array-initialisation với Danh sách. Nó sẽ cung cấp cho một lỗi thời gian biên dịch. Ví dụ:Danh sách <int> kiểm tra = {1, 2, 3} - đó có phải là một tính năng hoặc lỗi không?
List<int> test = { 1, 2, 3}
// At compilation the following error is shown:
// Can only use array initializer expressions to assign to array types.
Tuy nhiên hôm nay tôi đã làm như sau (rất đơn giản):
class Test
{
public List<int> Field;
}
List<Test> list = new List<Test>
{
new Test { Field = { 1, 2, 3 } }
};
Đoạn mã trên biên dịch tốt, nhưng khi chạy nó sẽ cho một "đối tượng tài liệu tham khảo không được đặt để một đối tượng " lỗi runtime.
Tôi hy vọng mã đó sẽ cung cấp lỗi biên dịch. Câu hỏi của tôi đối với bạn là: Tại sao không, và có lý do chính đáng nào để khi một kịch bản như vậy chạy đúng không?
Điều này đã được thử nghiệm bằng cách sử dụng .NET 3.5, cả trình biên dịch .Net và Mono.
Chúc mừng.
Ví dụ đơn giản 'Kiểm tra thử nghiệm = new Test {Field = {1, 2, 3}};' có cùng hành vi. – CodesInChaos
"Tham chiếu đối tượng không được đặt thành đối tượng" là khá hợp lý vì trường danh sách của bạn không được khởi tạo. Thay đổi nội dung Kiểm tra thành Danh sách công khai Trường = Danh sách mới (); làm cho điều này chạy mà không có bất kỳ vấn đề cũng có. –
có một phản xạ, và xem cách trình biên dịch xử lý này, và bạn sẽ hiểu. cũng xem cách var stuff = new List() {4,5}; được handeled –