C # как создать метод, который вызывает делегат для другого универсального метода

#c# #generics #delegates #lambda

#c# #общие #делегаты #лямбда

Вопрос:

У меня есть код, подобный этому….

 var x = inv.InvokeProxy<ServiceClient, AnotherType, ReturnType>(
    p => p.execute(input), guid);
  

Что я хочу сделать, так это инкапсулировать весь приведенный выше код в делегат, включая указанные типы.

Затем я хочу создать другой метод, который будет буквально вызывать вышеупомянутый метод. Что-то вроде этого…

 Func<a,b> func = delegate()
{

.... 1st code sample inserted here ...

}
  

Затем мне нужно передать func другому методу, который будет его вызывать, например

 protected TReturn InvokeDelegate<TReturn>(Func<> functionObject)
{
    return functionObject.Invoke();
}
  

Кто-нибудь знает, как это можно сделать?

Комментарии:

1. Не совсем понятно, что вы имеете в виду, из-за таких вещей, как Func<> и Func<a,b> . В чем смысл InvokeDelegate — почему вызывающий объект не может просто вызвать делегат самостоятельно?

Ответ №1:

На самом деле это довольно просто:

 Func<TypeOfInput, Guid, TypeOfX> func = (input, guid) => 
                  inv.InvokeProxy<ServiceClient, AnotherType, ReturnType>(
                                             p => p.execute(input), guid);
  

Выполните это следующим образом:

 TypeOfInput yourInput = ...;
Guid yourGuid = ...;
TypeOfX x = func(yourInput, yourGuid);