컴파일러 오류 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;
이 코드는 형식 인수가 포인터 형식이 아니기 때문에 올바른 식 트리입니다. 이 코드는 포인터 배열이며 배열은 포인터 형식이 아닙니다. 또한 식 트리의 본문에서 포인터와 관련된 어떠한 위험 요소도 수행되지 않습니다.