我有以下扩展方法:
public static IFoo Foo(this IFluentApi api, Action action);
public static IFoo<TResult> Foo<TResult>(
this IFluentApi api, Func<TResult> func);
public static IBar Bar(this IFoo foo);
public static void FooBar(this IBar bar, Action action);
public static void FooBar<TResult>( // <- this one cannot work as desired
this IBar bar, Action<TResult> action);
泛型接口总是派生自它们对应的非泛型接口。
不幸的是,要使这项工作:
api.Foo(x => ReturnLong())
.Bar()
.FooBar(x => ...); // x should be of type long
我还需要实现以下扩展方法:
public static IBar<TResult> Bar<TResult> (this IFoo<TResult> foo);
并将上述扩展方法中的最后一个更改为:
public static void FooBar<TResult>(
this IBar<TResult> bar, Action<TResult> action);
因为我实际上不仅有一个非常长Bar()
的方法链Foo()
,FooBar()
而且我会有巨大的额外实施成本。
有没有办法避免这个问题并“神奇地”转发TResult
通用参数?
编辑:
不丢失类型推断!