我需要调用采用原始指针的 unsafe 方法。

为此,我需要构造 Expression 来表示指向由 VariableExpressionParameterExpression 表示的值的指针。

怎么做?

最佳答案

我通常处理 Expression 的方法是让 C# 编译器为我构建 Expression,它具有出色的 lambda 解析能力,然后检查它在调试器中生成的内容。但是,对于您描述的场景,我们几乎立即遇到了问题:

新项目,设置“允许不安全”。

需要原始指针的方法:

class MyClass
{
    public unsafe int MyMethod(int* p)
    {
        return 0;
    }
}

构建表达式的代码:
class Program
{
    unsafe static void Main(string[] args)
    {
        var mi = typeof (MyClass).GetMethods().First(m => m.Name == "MyMethod");

        int q = 5;

        Expression<Func<MyClass, int, int>> expr = (c, i) => c.MyMethod(&i);

    }
}

我的目的是运行它并查看 expr 在调试器中的样子;但是,当我编译时,我得到了



查看 the docs for this error ,看起来您的“需要构造表示指向值的指针的表达式”永远无法满足:

关于c# - 使用表达式树调用不安全的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22479327/

10-15 10:40