方法覆盖C#</t>中的Func <t,m>和Action <t> </t,m>

时间:2015-03-24 00:36:12

标签: c# methods override

我有以下两种方法可以使用:

    public T InvokeFunc<T>(Func<ServiceClient,T> operation)
    {
        return operation(client);
    }

    public void InvokeAction(Action<ServiceClient> operation)
    {
        operation(client);
    }

有没有办法让这些方法相互覆盖,编译器能够区分我尝试使用哪一个?

这就是我的尝试:

    public void InvokeOperation(Action<RimsoftHRServiceClient> operation)
    {
        operation(client);
    }

    public T InvokeOperation<T>(Func<RimsoftHRServiceClient,T> operation)
    {
        operation(client);
    }

但是当我尝试使用这两种方法中的任何一种时,我得到一个错误,说编译器无法识别我想要使用哪种方法。

我想做这样的事情:

 List<City> cities = InvokeOperation(x => x.GetAllCities()); //GetAllCities returns List<City>

但也能够做到这一点:

InvokeOperation(x=>x.TestCommunication()); //TestCommunication returns void

这可能吗?还是我必须为这两种方法使用不同的名称?

1 个答案:

答案 0 :(得分:0)

不幸的是,这是不可能的。

规范声明C#方法重载必须具有不同的参数,如下面的链接所示,

http://msdn.microsoft.com/en-us/library/ms229029.aspx

毕竟,在编译之前,他怎么知道你使用哪种方法?这可能会在运行时生成异常

希望这有帮助