コンパイラ エラー 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;
このコードは、いずれの型引数もポインタ型ではないため、有効な式のツリーです。これらはポインタの配列で、配列はポインタ型ではありません。また、式のツリーの本体では、いずれのポインタも正常に機能します。