Ive chỉ nhìn thấy một đoạn mã có sử dụng một lớp danh sách chung để nhanh chóng tự theo cách sau đây:Cú pháp này bằng cách sử dụng mới theo sau bởi một danh sách bên trong niềng răng là gì?
var foo = new List<string>(){"hello", "goodbye"};
Các dấu ngoặc nhọn sau khi contructor đặc biệt khó hiểu. Nó nhắc nhở tôi hơi của
var bar = new string[]{"hi","bye"};
nhưng trong quá khứ tôi đã wouldve luôn được sử dụng:
var foo = new List<string>(new []{"hello", "goodbye"});
Có ai có một liên kết để giải thích cú pháp trong dòng đầu tiên của mã? Tôi thậm chí sẽ không biết bắt đầu từ đâu với googling nó.
Cú pháp "khó hiểu" ngay lập tức nhắc bạn về tính năng * giống hệt cho mảng * có khả năng là dấu hiệu cho thấy nó thực sự không gây nhầm lẫn chút nào, phải không? Chúng tôi đã chọn cú pháp đó rất cẩn thận để nó có thể dẫn bạn đến chính xác trực giác mà bạn đã có. –
@maxp "Trong quá khứ", bạn đã khởi tạo một Danh sách bằng cách gọi một hàm tạo mất IEnumerable và sử dụng cú pháp khởi tạo mảng để tạo một bộ sưu tập ẩn danh, tạo hai tham chiếu đến cùng một bộ sưu tập. TBH Tôi không biết tại sao trình biên dịch không tối ưu hóa cú pháp trong dòng 1 đến dòng 3 - chắc chắn nó biết rằng đối tượng được tạo ra bởi 'new []' được chuyển vào hàm tạo List không thể được gọi độc lập theo bất kỳ cách nào khác, và do đó không cần thiết để tiếp tục sống. –
@ValAkkapeddi: Nhóm biên dịch * nên biết người viết 'List 'sẽ làm gì với đối tượng đó? Trình biên dịch không có kiến thức đặc biệt mà bất kỳ công cụ 'List ' cụ thể nào có hoặc không làm bất cứ điều gì đặc biệt với mảng được truyền cho nó. –