使用带有新Func <t,tresult =“”> </t,>的void返回类型

时间:2010-11-22 10:18:58

标签: c# generics

我在我的代码中使用匿名委托调用此示例函数:

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

4 个答案:

答案 0 :(得分:44)

如果没有返回类型,则需要Action<int,string>

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

或只是:

Action<int, string> del = OtherFunction;

答案 1 :(得分:7)

你必须使用Action&lt; T>如果你想返回无效。

答案 2 :(得分:3)

你需要行动&lt; T>如果你不想归还某些东西

答案 3 :(得分:0)

如果您不需要任何返回值,请使用Action而不是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();
            }
        }
    }