식 트리에서 허용되지 않는 식으로 인해 생성된 오류 및 경고 해결

이 문서에서는 다음과 같은 컴파일러 오류를 다룹니다.

  • CS0765 - 정의 선언만 있거나 제거된 조건부 메서드만 있는 부분 메서드는 식 트리에서 사용할 수 없습니다.
  • CS0831 - 식 트리에는 기본 액세스 권한을 사용할 수 없습니다.
  • CS0832 - 식 트리에는 대입 연산자를 사용할 수 없습니다.
  • CS0834 - 문 본문이 있는 람다 식은 식 트리로 변환할 수 없습니다.
  • CS0835 - 람다 식을 형식 인수 'type'이 대리자 형식이 아닌 식 트리로 변환할 수 없습니다.
  • CS0838 - 식 트리에는 다차원 배열 이니셜라이저를 사용할 수 없습니다.
  • CS0845 - 람다 식 트리에는 왼쪽에 null 또는 기본 리터럴이 있는 병합 연산자를 사용할 수 없습니다.
  • CS0853 - 식 트리에는 명명된 인수 사양을 사용할 수 없습니다.
  • CS0854 - 식 트리에는 선택적 인수를 사용하는 호출을 포함할 수 없습니다.
  • CS0855 - 식 트리에는 인덱싱된 속성을 사용할 수 없습니다.
  • CS1944 - 식 트리에는 안전하지 않은 포인터 연산을 사용할 수 없습니다.
  • CS1945 - 식 트리에는 무명 메서드 식을 사용할 수 없습니다.
  • CS1946 - 무명 메서드 식은 식 트리로 변환할 수 없습니다.
  • CS1951 - 람다 식 트리에는 ref, in 또는 out 매개 변수를 사용할 수 없습니다.
  • CS1952 - 람다 식 트리에는 가변 인수가 있는 메서드를 사용할 수 없습니다.
  • CS1963 - 식 트리에는 동적 연산을 포함할 수 없습니다.
  • CS1989 - 비동기 람다 식은 식 트리로 변환할 수 없습니다.
  • CS2037 - 람다 식 트리에는 인수에서 참조가 생략된 COM 호출을 포함할 수 없습니다.
  • CS7053 - 식 트리에는 "feature"를 포함할 수 없습니다.
  • CS8072 - 람다 식 트리에는 null 전파 연산자를 포함할 수 없습니다.
  • CS8074 - 람다 식 트리에는 사전 이니셜라이저를 포함할 수 없습니다.
  • CS8075 - 람다 식의 컬렉션 이니셜라이저에는 확장 Add 메서드가 지원되지 않습니다.
  • CS8110 - 식 트리에는 로컬 함수에 대한 참조를 포함할 수 없습니다.
  • CS8122 - 식 트리에는 'is' 패턴 일치 연산자를 사용할 수 없습니다.
  • CS8143 - 식 트리에는 튜플 리터럴을 사용할 수 없습니다.
  • CS8144 - 식 트리에는 튜플 변환을 사용할 수 없습니다.
  • CS8153 - 람다 식 트리에는 참조로 반환되는 메서드, 속성 또는 인덱서에 대한 호출을 사용할 수 없습니다.
  • CS8155 - 참조로 반환되는 람다 식은 식 트리로 변환할 수 없습니다.
  • CS8188 - 식 트리에는 throw 식을 포함할 수 없습니다.
  • CS8198 - 식 트리에는 out 인수 변수 선언을 사용할 수 없습니다.
  • CS8207 - 식 트리에는 취소를 포함할 수 없습니다.
  • CS8382 - 식 트리에는 튜플 == 또는 != 연산자를 사용할 수 없습니다.
  • CS8514 - 식 트리에는 switch 식을 포함할 수 없습니다.
  • CS8640 - 식 트리에는 ref struct 또는 제한된 형식의 값을 포함할 수 없습니다.
  • CS8642 - 식 트리에는 null 병합 할당을 포함할 수 없습니다.
  • CS8790 - 식 트리에는 패턴 System.Index 또는 System.Range 인덱서 액세스 권한을 포함할 수 없습니다.
  • CS8791 - 식 트리에는 from-end 인덱스('^') 식을 포함할 수 없습니다.
  • CS8792 - 식 트리에는 범위('..') 식을 포함할 수 없습니다.
  • CS8810 - 식 트리에는 메서드 그룹의 '&'을(를) 사용할 수 없습니다.
  • CS8849 - 식 트리에는 with 식을 포함할 수 없습니다.
  • CS8927 - 식 트리에는 정적 가상 또는 추상 인터페이스 멤버의 액세스 권한을 포함할 수 없습니다.
  • CS8952 - 식 트리에는 보간된 문자열 처리기 변환을 포함할 수 없습니다.
  • CS8972 - 특성이 있는 람다 식은 식 트리로 변환할 수 없습니다.
  • CS9170 - 식 트리에는 인라인 배열 액세스 또는 변환을 포함할 수 없습니다.
  • CS9175 - 식 트리에는 컬렉션 식을 포함할 수 없습니다.

식 트리 제한 사항

위 목록의 모든 오류는 식 트리에서 허용되지 않는 C# 식 형식을 사용했음을 나타냅니다. 대부분의 경우 허용되지 않는 식은 C# 3.0 이상에 도입된 구문을 나타냅니다. 이러한 식은 식 트리를 구문 분석하는 모든 라이브러리에서 호환성이 손상되는 변경을 일으킬 수 있으므로 금지됩니다. 새 구문이 허용된 경우 새 C# 식을 구문 분석하도록 모든 라이브러리를 개선해야 합니다.

다음 식은 허용되지 않습니다.

기타 제한 사항은 다음과 같습니다.

  • 특성은 람다 식, 해당 매개 변수 또는 반환에 적용할 수 없습니다.
  • 람다 식은 형식 매개 변수가 대리자 형식인 형식에서 System.Linq.Expressions.Expression에서 파생된 형식으로 변환할 수 있어야 합니다.
  • 명명된 매개 변수와 선택적 매개 변수는 제한됩니다. 식은 명명된 인수를 지정하는 메서드를 호출할 수 없고, 선택적 매개 변수의 기본값을 사용할 수 없습니다.
  • 사전 이니셜라이저는 허용되지 않습니다. 확장 Add 메서드도 허용되지 않습니다.
  • 대상 식은 람다 식이어야 합니다. 상수 및 변수는 허용되지 않지만, 상수 또는 변수를 반환하는 람다 식은 허용됩니다.
  • 안전하지 않은 포인터 작업은 허용되지 않습니다.
  • COM 호출은 인수에 ref을(를) 포함해야 하며, 암시할 수 없습니다.
  • 지원되지 않는 __arglist 키워드는 허용되지 않습니다.