#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);