次の拡張メソッドがあります。
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
ジェネリック パラメータを転送する方法はありますか?
編集:
型推論を失うことなく!