假设我已经定义了两个不相关的类型和两个具有相同签名但不同类型过滤器的扩展方法:
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 { } }
那么当我写新的Foo()时,Frob();我收到一个错误
错误CS0121:以下方法或属性之间的调用是模糊的:’FooExtensions.Frob< TFoo>(TFoo)’和’BarExtensions.Frob< TBar>(TBar)
有人可以解释为什么这不成功,怎么避免呢?
编辑:这发生在VS2015 Update 3和VS2017 RC.
EDIT2:这里的想法是使流畅的API适用于类层次结构:
new Foo() .Frob() .Brob()