Ответ 1
Если тип возврата отсутствует, вы хотите Action<int,string>
:
var del = new Action<int, string>(OtherFunction);
или просто:
Action<int, string> del = OtherFunction;
Я использую анонимный делегат в моем коде, вызывающем эту примерную функцию:
public static int TestFunction(int a, int b) {
return a + b;
}
Делегат выглядит следующим образом:
var del = new Func<int, int, int>(TestFunction);
Мой вопрос: как вы указываете тип возврата void
для TResult
? Не работает следующее:
public static void OtherFunction(int a, string b) { ... }
var del = new Func<int, string, void>(OtherFunction);
Если тип возврата отсутствует, вы хотите Action<int,string>
:
var del = new Action<int, string>(OtherFunction);
или просто:
Action<int, string> del = OtherFunction;
Вы должны использовать Action <T> , если вы хотите вернуть void.
Вам нужно Действие <T> , если вы не хотите что-то возвращать
Используйте действие вместо Func, если вам не нужно какое-либо возвращаемое значение
public void InvokeService<T>(Binding binding, string endpointAddress, Action<T> invokeHandler) where T : class
{
T channel = FactoryManager.CreateChannel<T>(binding, endpointAddress);
ICommunicationObject communicationObject = (ICommunicationObject)channel;
try
{
invokeHandler(channel);
}
finally
{
try
{
if (communicationObject.State != CommunicationState.Faulted)
{
communicationObject.Close();
}
}
catch
{
communicationObject.Abort();
}
}
}