Подтвердить что ты не робот

Использование типов возврата void с новыми Func <T, TResult>

Я использую анонимный делегат в моем коде, вызывающем эту примерную функцию:

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);
4b9b3361

Ответ 1

Если тип возврата отсутствует, вы хотите Action<int,string>:

var del = new Action<int, string>(OtherFunction);

или просто:

Action<int, string> del = OtherFunction;

Ответ 2

Вы должны использовать Action <T> , если вы хотите вернуть void.

Ответ 3

Вам нужно Действие <T> , если вы не хотите что-то возвращать

Ответ 4

Используйте действие вместо 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();
            }
        }
    }