我有以下程序:
class MyClass
{
public static Dictionary<string, Func<string, string, string>> FuncMap;
static MyClass()
{
FuncMap = new Dictionary<string, Func<string, string, string>>();
FuncMap.Add("testing", (x,y) => x + " " + y);
}
public string Foo()
{
MethodInfo func = FuncMap["testing"].Method;
var t = Expression.Lambda<Func<string>>(Expression.Call(func, new Expression[]
{
Expression.Constant("testing"),
Expression.Constant("testing 2")
})).Compile();
return t();
}
}
class Program
{
static void Main(string[] args)
{
var inst = new MyClass();
Console.WriteLine(inst.Foo());
}
}
当我在Visual Studio 2013中编译它时没有问题,但是在使用RyuJIT在Visual Studio 2015中编译时,我得到以下异常:
Unhandled Exception: System.ArgumentException: Static method requires null instance, non-static method requires non-null instance.
这是RyuJIT的错误吗?有没有工作?
答案 0 :(得分:1)
看起来这是设计https://github.com/dotnet/roslyn/issues/5075
要修复上述代码,请将Expression.Inall替换为Expression.Invoke。