3
나는 다음과 같은 방법이 있습니다이 C# 메서드 오버로드가 예상대로 작동하지 않는 이유는 무엇입니까?
나는 다음과 같은 실행public void Say<TItem>(TItem item)
{
Console.WriteLine("A");
}
public void Say<TItem>(IEnumerable<TItem> items)
{
Console.WriteLine("B");
}
:
void Main()
{
Say<string>("Foo");
Say(new string[] { "Foo", "Bar"});
}
첫 번째 방법은 두 번 호출됩니다
A
A
IEnumerable<T>
TItem[]
로 변경 참고 않습니다 예상대로 작동하지만 IEnumerable<T>
의 경우 두 번째 방법을 선택하지 않는 이유는 무엇입니까? 의도 한 오버로드를 어떻게 달성 할 수 있습니까?
위와 같지만 매개 변수 유형이'IEnumerable'이 아닌'string [] '인 경우이 추가 도움말이 필요하지 않은 이유는 무엇입니까? –
MaYaN
@MaYaN 두 경우 모두 호출이 두 서명과 잠재적으로 일치 할 수 있습니다. 이 메소드가'IEnumerable'을 취할 때, 암시 적 캐스트가 필요하다. 다른 메소드는 그런 캐스트가 필요 없다. complier의 마음에, 그것은 첫 번째 과부하를 더 가깝게 만든다. 좀 더 구체적인 것을 얻으면 컴파일러는 당신이하려고했던 것을 더 잘 추론 할 수 있습니다. – pquest