C# 中是否有可能接受稍后通过反射调用的任意 lambda?
那么你可以编写一个方法来获取任意值delegate:
public void AddFunction(string name, Delegate function)
但是,从 lambda 表达式进行的转换必须作为特定委托,因此您需要:
Func<bool, string, string> function = (a, b) => a ? b : "whoops"
foo.GlobalEnvironment.AddFunction("test", function);
或者在通话中投射:
foo.GlobalEnvironment.AddFunction("test",
(Func<bool, string, string>)((a, b) => a ? b : "whoops"));
你可以把所有的重载放入one放置、保存AddFunction
完全通用,但是有一个像这样的静态类(有点像Tuple
):
public static class Func
{
public Func<TResult> Create(Func<TResult> function) { return function; }
public Func<T1, TResult> Create(Func<T1, TResult> function)
{
return function;
}
public Func<T1, T2, TResult> Create(Func<T1, T2, TResult> function)
{
return function;
}
// etc
}
这堂课基本上just存在是为了方便。然后你可以打电话:
foo.GlobalEnvironment.AddFunction("test",
Func.Create((bool a, string b) => a ? b : "whoops"));