나는 다른 일이 눈치 두 개의 오버로드 된 메서드가 있다고 가정 :방법 과부하 해상도는
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 (persons as IEnumerable);를 호출하면 다른 메소드를 호출해야합니다.제네릭 메서드 검색은'Person []'에서'IEnumerable '로의 암시 적 캐스트를 수행하지 않습니다. 'person.ToList()'를 호출 할 때 직접 타입은'List '(암시 적 캐스트가 필요 없음)입니다. –
+1 나는이 문제에 대해 조금만 놀랐다. – Dan