在 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
说的有道理,毕竟编译前他怎么知道你用的是什么方法呢?这可能会在运行时产生异常
希望对您有所帮助
我有以下两种有效的方法:
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
说的有道理,毕竟编译前他怎么知道你用的是什么方法呢?这可能会在运行时产生异常
希望对您有所帮助