tôi đang tìm kiếm tại initializers # sưu tập C và thấy việc thực hiện là rất thực dụng nhưng cũng rất không giống như bất cứ điều gì khác trong C#Tại sao bộ khởi tạo bộ sưu tập C# hoạt động theo cách này?
tôi có thể tạo mã như thế này:
using System;
using System.Collections;
class Program
{
static void Main()
{
Test test = new Test { 1, 2, 3 };
}
}
class Test : IEnumerable
{
public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
public void Add(int i) { }
}
Kể từ khi tôi đã đáp ứng được yêu cầu tối thiểu cho trình biên dịch (thực hiện IEnumerable
và public void Add
) điều này hoạt động nhưng rõ ràng là không có giá trị.
Tôi đã tự hỏi điều gì đã ngăn nhóm C# tạo ra một bộ yêu cầu nghiêm ngặt hơn? Nói cách khác, tại sao, để cú pháp này biên dịch, trình biên dịch có yêu cầu loại thực thi ICollection
không? Điều đó có vẻ nhiều hơn trong tinh thần của các tính năng C# khác.
Chỉ cần một lưu ý cho nhà phát triển web: rằng NotImplementedException sẽ bị ném nếu bạn cố gắng tuần tự hóa một cá thể của lớp đó thành JSON (thực thi IEnumerable làm cho trình nối tiếp lặp qua đối tượng) – diachedelic