我有以下两种方法可以使用:
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
这可能吗?还是我必须为这两种方法使用不同的名称?
答案 0 :(得分:0)
不幸的是,这是不可能的。
规范声明C#方法重载必须具有不同的参数,如下面的链接所示,
http://msdn.microsoft.com/en-us/library/ms229029.aspx
毕竟,在编译之前,他怎么知道你使用哪种方法?这可能会在运行时生成异常
希望这有帮助