Gần đây, tôi tình cờ gặp một số mã trông như thế này:đường cú pháp để thêm các mục vào bộ sưu tập trong initialisers đối tượng
public class Test
{
public ICollection<string> Things { get; set; }
public Test()
{
Things = new List<string> { "First" };
}
public static Test Factory()
{
return new Test
{
Things = { "Second" }
};
}
}
Calling Test.Factory()
kết quả trong một đối tượng Test
với một bộ sưu tập Things
chứa cả "First"
và "Second"
.
Dường như dòng Things = { "Second" }
gọi phương thức Add
là Things
. Nếu số ICollection
được đổi thành IEnumerable
, có lỗi cú pháp nêu rõ "IEnumerable<string> does not contain a definition for 'Add'
".
Cũng rõ ràng là bạn chỉ có thể sử dụng loại cú pháp này trong trình khởi tạo đối tượng. Mã như thế này không hợp lệ:
var test = new Test();
test.Things = { "Test" };
Tên của tính năng này là gì? Phiên bản C# được giới thiệu ở đâu? Tại sao nó chỉ có sẵn trong bộ khởi tạo đối tượng?
Tôi có thể đặt cược nó đã được giới thiệu trong C# 6.0 nhưng tôi không thể tìm thấy bất kỳ thông tin nào về nó. – MistyK
Nó được gọi là [bộ khởi tạo bộ sưu tập] (https://msdn.microsoft.com/en-us/library/bb384062.aspx) và tôi chắc chắn nó đã sớm hơn C# 6, nhưng không thể nói chính xác. –
http://geekswithblogs.net/BlackRabbitCoder/archive/2015/05/08/c.net-little-wonders-indexer-initializer-syntax.aspx - đó là C# 6.0 – MistyK