【发布时间】:2015-11-27 02:56:53
【问题描述】:
有没有办法以通用方式传递方法名称,而不传递其参数,因此可以通过传递参数的方法调用它?
考虑这个例子:
public class Client
{
public string Convert(int value)
{
return value.ToString();
}
}
public class Wrapper<TClient>
{
TClient Client;
public TResult Invoke<TArg, TResult>(Func<TClient, TArg, TResult> action, TArg arg)
{
return action(Client, arg);
}
}
我希望能够将我想要调用的TClient 方法传递给包装器,并传递实际参数,所有这些都是一般性的:
var wrapper = new Wrapper<Client>();
wrapper.Invoke(c => c.Convert, 5);
是否有任何可能的方法来实现这一点,而无需对方法名称进行硬编码或失去其通用性(即通过使用Delegate)?
注意事项:
Client 是一个外部密封类,它公开了许多参数中的每一个的无数方法。我想包装它的行为,我不介意在包装器中编写所有必要的代码,但是包装器的使用应该尽可能干净。
更新
我想避免需要指定参数。整个想法是让它们从指定的动作中推断出来。
【问题讨论】:
标签: c# generics lambda expression-trees