zauważyłem to na drugi dzień, że masz dwie przeciążone metody:Sposób w odniesieniu do leków generycznych i IEnumerable
public void Print<T>(IEnumerable<T> items) {
Console.WriteLine("IEnumerable T");
}
public void Print<T>(T item) {
Console.WriteLine("Single T");
}
ten kod:
public void TestMethod() {
var persons = new[] {
new Person { Name = "Yan", Age = 28 },
new Person { Name = "Yinan", Age = 28 }
};
Print(persons);
Print(persons.ToList());
}
drukuje:
Single T
Single T
Dlaczego numery Person[]
i List<Person>
są lepiej dopasowane do T
niż w tych przypadkach są one IEnumerable<T>
?
Dzięki,
UPDATE: Ponadto, jeśli masz inny przeciążenie
public void Print<T>(List<T> items) {
Console.WriteLine("List T");
}
Print(persons.ToList());
rzeczywiście drukuje List T
zamiast Single T
.
Wywołanie "Print (persons as IEnumerable);" powinno wywołać inną metodę.Ogólne wyszukiwanie metody nie wykonuje niejawnego rzutowania z 'Person []' na 'IEnumerable '. Kiedy wywołujesz 'person.ToList()', twoim bezpośrednim typem jest 'List ' (również nie wymaga niejawnego rzutowania). –
+1 Przez jakiś czas błąkałem się z tym problemem. – Dan