我有以下几种方法:
当我运行以下命令时:
第一种方法被调用了两次:
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>
的情况下,为什么它没有选择第二个方法?如何实现预期的重载?
string[]
而不是IEnumerable<T>
,为什么不需要这个额外的帮助呢? - MaYaNIEnumerable
时,需要进行隐式转换才能匹配,而对于另一个方法则不需要进行此类转换。在编译器看来,这使得第一个重载更接近匹配。当你变得更具体时,编译器能够更好地推断出你试图做什么。 - pquest