A resolução do método genérico em C # falha com um erro de chamada ambíguo
Suponha que eu tenha definido dois tipos não relacionados e dois métodos de extensão com a mesma assinatura, mas com filtros de tipos diferentes:
public class Foo {}
public class Bar {}
public static class FooExtensions
{
public static TFoo Frob<TFoo>(this TFoo foo) where TFoo : Foo { }
public static TFoo Brob<TFoo>(this TFoo foo) where TFoo : Foo { }
}
public static class BarExtensions
{
public static TBar Frob<TBar>(this TBar bar) where TBar : Bar { }
}
Então quando eu escrevonew Foo().Frob();
Eu recebo um erro
error CS0121: The call is ambiguous between the following methods or properties: 'FooExtensions.Frob<TFoo>(TFoo)' and 'BarExtensions.Frob<TBar>(TBar)'
Alguém poderia explicar por que isso falha e como evitá-lo?
EDIT: Isso acontece na atualização 3 do VS2015 e no VS2017 RC.
EDIT2: A idéia aqui é ter uma API fluente que funcione em uma hierarquia de classes:
new Foo()
.Frob()
.Brob()