在 C# 中用 Func<T,M> 和 Action<T> 覆盖方法

Method overrides with Func<T,M> and Action<T> in C#

我有以下两种有效的方法:

    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

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

很遗憾,这是不可能的。

规范指出 C# 方法重载必须有不同的参数,如下面的 link 所示,

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

说的有道理,毕竟编译前他怎么知道你用的是什么方法呢?这可能会在运行时产生异常

希望对您有所帮助