这是我的情景:
Class Test
{
public int TestMethod(string s)
{
return s.length;
}
public void TestInvoker()
{
var result = Invoker.Call( (new Test()).TestMethod,"String");
}
}
Class Invoker
{
public static object Call(Delegate method, object input) {... Do stuff ...}
}
我该怎么做?因为“TestMethod”不是委托,我可以用Func<>来做,但我想避免实例化Func<>每次我使用调用者时委托。
这可能吗?
答案 0 :(得分:2)
这是可能的,但前提是该方法接受具体的委托类型;不是Delegate
本身。
如果您将方法更改为
public static TReturn Call<TInput, TReturn>(Func<TInput, TReturn> method, TInput input)
,它会正常工作。
更确切地说,C#具有从方法组到匹配委托类型的隐式转换。