コンパイラ エラー 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;

このコードは、いずれの型引数もポインタ型ではないため、有効な式のツリーです。これらはポインタの配列で、配列はポインタ型ではありません。また、式のツリーの本体では、いずれのポインタも正常に機能します。

参照

参照

unsafe (C# リファレンス)