我需要调用采用原始指针的 unsafe
方法。
为此,我需要构造 Expression
来表示指向由 VariableExpression
或 ParameterExpression
表示的值的指针。
怎么做?
最佳答案
我通常处理 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/