我注意到這個有一天,說你有兩個重載的方法:方法重載
public void Print<T>(IEnumerable<T> items) {
Console.WriteLine("IEnumerable T");
}
public void Print<T>(T item) {
Console.WriteLine("Single T");
}
此代碼:
public void TestMethod() {
var persons = new[] {
new Person { Name = "Yan", Age = 28 },
new Person { Name = "Yinan", Age = 28 }
};
Print(persons);
Print(persons.ToList());
}
打印:
Single T
Single T
爲什麼Person[]
和List<Person>
更好地匹配到T
比他們在這些情況下IEnumerable<T>
?
感謝,
UPDATE: 另外,如果您有其他重載
public void Print<T>(List<T> items) {
Console.WriteLine("List T");
}
Print(persons.ToList());
將實際打印List T
而不是Single T
。
調用`打印(人員爲IEnumerable);`應調用另一種方法。泛型方法查找不會執行從`Person []`到`IEnumerable `的隱式轉換。當你調用`person.ToList()`時,你的直接類型是`List `(也不需要隱式轉換)。 –
2011-02-05 23:24:53
+1我一直在擺弄這個問題。 – Dan 2013-07-10 19:10:17