컴파일러 오류 CS1944

업데이트: 2007년 11월

오류 메시지

식 트리에는 안전하지 않은 포인터 연산을 사용할 수 없습니다.
An expression tree may not contain an unsafe pointer operation

식 트리에서는 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# 참조)