考慮下面的類:爲什麼泛型方法在通用方法不匹配時不能選擇特定方法?
public static class MWE
{
public static void Foo<T, TColl>(Expression<Func<IFoo, bool>> bar, TColl foos)
where TColl : IEnumerable<T>
{
}
public static void Foo<T, TColl>(Expression<Func<IFoo, T>> bar, TColl foos)
where TColl : IEnumerable<T>
{
}
static MWE()
{
Foo(bar => bar.GetThing(), new List<IThing>());
Foo(bar => bar.GetBool(), new List<IThing>());
}
}
public interface IFoo
{
IThing GetThing();
bool GetBool();
}
我得到的第二個呼叫編譯錯誤Foo
,抱怨,有沒有轉換從List<IThing>
到IEnumerable<bool>
。在我看來,編譯器沒有看到第一個重載,儘管它匹配(而第二個沒有)。
爲什麼?這兩種方法可以共存並且工作嗎?
試着明確指出'Foo'的通用參數。類似於:'Foo>(bar => bar.GetBool(),new List ());'它不能正確推斷'T'應該是什麼。 –