2 つのジェネリック メソッドを作成しようとしています。そのうちの 1 つは void で、もう 1 つは戻り値の型です。void メソッドはAction
デリゲートを受け取り、もう 1 つのメソッドはデリゲートを受け取りFunc
ます。void メソッドの実装は次のようになります。
public static void ExecuteVoid<T>(Action<T> actionToExecute)
{
string endpointUri = ServiceEndpoints.GetServiceEndpoint(typeof(T));
using (ChannelFactory<T> factory = new ChannelFactory<T>(new BasicHttpBinding(), new EndpointAddress(endpointUri)))
{
T proxy = factory.CreateChannel();
actionToExecute(proxy);
}
}
これは問題なく動作しますが、非 void メソッドに問題があります。
public static T ExecuteAndReturn<T>(Func<T> delegateToExecute)
{
string endpointUri = ServiceEndpoints.GetServiceEndpoint(typeof(T));
T valueToReturn;
using (ChannelFactory<T> factory = new ChannelFactory<T>(new BasicHttpBinding(), new EndpointAddress(endpointUri)))
{
T proxy = factory.CreateChannel();
valueToReturn = delegateToExecute();
}
return valueToReturn;
}
今、次のようにメソッドを呼び出そうとすると:
var result = ServiceFactory.ExecuteAndReturn((IMyService x) => x.Foo());
次のコンパイル エラーが発生します。
The type arguments for method 'ServiceFactory.ExecuteAndReturn<T>(System.Func<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
Foo()
この場合、 を返す引数のないメソッドobject
です。次に、型を明示的に指定してメソッドを呼び出そうとしました。
var result = ServiceFactory.ExecuteAndReturn<IMyService>(x => x.Foo());
しかし今、別の例外が発生しています
Delegate 'IMyService' does not take 1 arguments.
私はここで本当に迷っています。どんな助けでも大歓迎です。