use*_*926 7 c# reflection unsafe expression-trees
我需要调用unsafe带有原始指针的方法.
为此,我需要构造Expression表示指向由VariableExpression或表示的值的指针ParameterExpression.
怎么做?
我通常采用的方法Expression是让C#编译器Expression为我构建,具有出色的lambda解析能力,然后检查它在调试器中的作用.但是,根据您描述的方案,我们几乎可以立即遇到问题:
新项目,设置'允许不安全'.
采用原始指针的方法:
class MyClass
{
public unsafe int MyMethod(int* p)
{
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
构建表达式的代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的意图是运行它,看看expr调试器中的样子; 但是,当我编译时,我得到了
错误CS1944:表达式树可能不包含不安全的指针操作
查看此错误的文档,看起来您的"需要构造表示值的指针"才能满足:
表达式树可能不包含不安全的指针操作
表达式树不支持指针类型,因为该
Expression<TDelegate>.Compile方法仅允许生成可验证的代码.看评论.[似乎没有任何评论!]纠正此错误
- 在尝试创建表达式树时,请勿使用指针类型.
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |