表达式bug与RyuJIT

本文关键字:RyuJIT bug 表达式 | 更新日期: 2023-09-27 18:11:40

我有以下程序:

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中编译这个时,它的工作没有问题,但当在Visual Studio 2015中编译时,我得到以下例外:

Unhandled Exception: System.ArgumentException: Static method requires null instance, non-static method requires non-null instance.

这是RyuJIT的一个bug吗?有什么变通的办法吗?

表达式bug与RyuJIT

看起来这是故意的https://github.com/dotnet/roslyn/issues/5075

要修复上述代码,请替换Expression。