Предположим, что я определил два несвязанных типа и два метода расширения с одинаковыми сигнатурами, но с разными типами фильтров:
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 { }
}
Тогда, когда я пишу new Foo().Frob();
, я получаю сообщение об ошибке
error CS0121: The call is ambiguous between the following methods or properties: 'FooExtensions.Frob<TFoo>(TFoo)' and 'BarExtensions.Frob<TBar>(TBar)'
Может кто-нибудь объяснить, почему это не удается и как его избежать?
EDIT: Это происходит в VS2015 Update 3 и VS2017 RC.
EDIT2: Идея здесь заключается в том, чтобы иметь свободный API, который работает в иерархии классов:
new Foo()
.Frob()
.Brob()