私は、他の日にこれを気づいたあなたは2つのオーバーロードされたメソッドを持っていると言う:メソッドオーバーロードの解決は
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
を印刷します。
'Print(people as IEnumerable);を呼び出すと、他のメソッドを呼び出す必要があります。ジェネリックメソッドルックアップは 'Person []'から 'IEnumerable 'への暗黙のキャストを行いません。 'person.ToList()'を呼び出すと、あなたの直接の型は 'List '(暗黙のキャストも必要ありません)です。 –
+1私はこの問題をちょっとやっています。 – Dan