Tôi nhận thấy điều này ngày khác, nói rằng bạn có hai phương pháp quá tải:Phương pháp giải quyết tình trạng quá tải liên quan đến Generics và IEnumerable
public void Print<T>(IEnumerable<T> items) {
Console.WriteLine("IEnumerable T");
}
public void Print<T>(T item) {
Console.WriteLine("Single T");
}
Mã này:
public void TestMethod() {
var persons = new[] {
new Person { Name = "Yan", Age = 28 },
new Person { Name = "Yinan", Age = 28 }
};
Print(persons);
Print(persons.ToList());
}
in:
Single T
Single T
Tại sao là Person[]
và List<Person>
phù hợp hơn với T
hơn chúng là IEnumerable<T>
trong những trường hợp này?
Cảm ơn,
UPDATE: Ngoài ra, nếu bạn có quá tải khác
public void Print<T>(List<T> items) {
Console.WriteLine("List T");
}
Print(persons.ToList());
sẽ thực sự in List T
thay vì Single T
.
Gọi 'In (người như IEnumerable);' nên gọi phương thức khác.Tra cứu phương thức chung không thực hiện một phép diễn xuất ngầm từ 'Person []' tới 'IEnumerable '. Khi bạn gọi 'person.ToList()', kiểu ngay lập tức của bạn là một 'Danh sách ' (cũng không đòi hỏi phải có diễn viên ngầm). –
+1 Tôi đã không quan tâm đến vấn đề này một chút. – Dan