Suppose I have defined two unrelated types and two extension methods with the same signature but different type filters:
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 { }
}
Then when I write new Foo().Frob();
I get an error
error CS0121: The call is ambiguous between the following methods or properties: 'FooExtensions.Frob<TFoo>(TFoo)' and 'BarExtensions.Frob<TBar>(TBar)'
Could someone explain why this fails and how to avoid it?
EDIT: This happens in VS2015 Update 3 and VS2017 RC.
EDIT2: The idea here is to have fluent API that works on a class hierarchy:
new Foo()
.Frob()
.Brob()
TFoo
. The idea here is to have fluent API methods that work on a class hierarchy. So I could writenew Foo().Frob().Grob().Blob();
. The issue arises when I have two independent types, but with extension methods taking similar arguments in same order. – Monoceros