RyuJIT的表达式错误

时间:2015-09-08 17:17:23

标签: c# .net

我有以下程序:

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的错误吗?有没有工作?

1 个答案:

答案 0 :(得分:1)

看起来这是设计https://github.com/dotnet/roslyn/issues/5075

要修复上述代码,请将Expression.Inall替换为Expression.Invoke。