编译器错误 CS1944
更新:2007 年 11 月
错误消息
表达式目录树不能包含不安全的指针操作
表达式目录树不支持指针类型,因为 Expression<TDelegate>.Compile 方法只能生成可验证代码。请参见注释。
更正此错误
- 请不要在尝试创建表达式目录树时使用指针类型。
示例
下面的示例生成 CS1944:
// cs1944.cs
// Compile with: /unsafe
using System.Linq.Expressions;
unsafe class Test
{
public delegate int* D(int i);
static void Main()
{
Expression<D> tree = x => &x; // CS1944
}
}
using System.Linq.Expressions;
unsafe class Test
{
public delegate int* D(int i);
static void Main()
{
Expression<D> tree = x => &x; // CS1944
}
}
在有些情况下,可以在表达式目录树中包含指针。例如,考虑以下代码:
Expression<Func<int*[], int*[]>) e = (int*[] i)=>i;
此代码是有效的表达式目录树,因为类型参数都不是指针类型。它们是指针数组,而数组不是指针类型。此外,表达式目录树体对使用任何指针都不会存在危险。