@EricLippert Большое спасибо вам, трудно переоценить то, как много я узнал о языке и программировании в целом, читая ваш блог.

оложим, я определил два несвязанных типа и два метода расширения с одной и той же сигнатурой, но разными фильтрами типов:

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)'

Может ли кто-нибудь объяснить, почему это не удается и как этого избежать?

РЕДАКТИРОВАТЬ: Это происходит в VS2015 Update 3 и VS2017 RC.

РЕДАКТИРОВАТЬ 2: Идея здесь состоит в том, чтобы иметь свободный API, который работает на иерархии классов:

new Foo()
  .Frob()
  .Brob()

Ответы на вопрос(1)

Ваш ответ на вопрос