람다 식 및 무명 함수를 사용할 때 발생하는 오류 및 경고
람다 식 선언 및 사용과 관련된 몇 가지 오류가 있습니다.
- CS0748: 람다 매개 변수가 일관성 없이 사용되었습니다. 매개 변수 형식은 모두 명시적이거나 모두 암시적이어야 합니다.
- CS1621: yield 문은 무명 메서드 또는 람다 식 안에 사용할 수 없습니다.
- CS1628: 무명 메서드, 람다 식 또는 쿼리 식 안에는
in
ref
또는out
매개 변수를 사용할 수 없습니다. - CS1632: 제어가 무명 메서드 또는 람다 식의 본문을 벗어날 수 없습니다.
- CS1673: 구조체 안의 무명 메서드, 람다 식, 쿼리 식은 'this'의 인스턴스 멤버에 액세스할 수 없습니다.
- CS1686: 지역 변수 또는 해당 멤버의 주소를 가져와 무명 메서드 또는 람다 식 안에 사용할 수 없습니다.
- CS1706: 식에 무명 메서드 또는 람다 식을 포함할 수 없습니다.
- CS8030: void 반환 대리자로 변환된 무명 함수는 값을 반환할 수 없습니다.
- CS8175: 무명 메서드, 람다 식 또는 쿼리 식에 ref 로컬을 사용할 수 없습니다.
- CS8916: 람다 식의 특성에는 괄호로 묶인 매개 변수 목록이 필요합니다.
- CS8971: InterpolatedStringHandlerArgument는 람다 매개 변수에 적용할 때 효과가 없으며 호출 사이트에서 무시됩니다.
- CS8975: 상황별 키워드
var
은 명시적 람다 반환 형식으로 사용할 수 없습니다. - CS9098: 암시적 형식 람다 매개 변수 '...'은 기본값을 가질 수 없습니다.
또한 람다 식 선언 및 사용과 관련된 몇 가지 경고가 있습니다.
- CS8971: InterpolatedStringHandlerArgument는 람다 매개 변수에 적용할 때 효과가 없으며 호출 사이트에서 무시됩니다.
- CS9099: 기본 매개 변수 값이 대상 대리자 형식에서 일치하지 않습니다.
- CS9100: 매개 변수에 람다 params 한정자는 있지만 대상 대리자 형식으로는 없습니다.
람다 식의 구문 제한 사항
일부 C# 구문은 람다 식 및 무명 메서드에서 금지됩니다. 람다 식에 유효하지 않은 구문을 사용하면 다음과 같은 오류가 발생합니다.
- CS1621:
yield
문은 무명 메서드 또는 람다 식 안에 사용할 수 없습니다. - CS1628: 무명 메서드, 람다 식 또는 쿼리 식 안에
in
,ref
또는out
매개 변수를 사용할 수 없습니다. - CS1632: 제어가 무명 메서드 또는 람다 식의 본문을 벗어날 수 없습니다.
- CS1673: 구조체 안의 무명 메서드, 람다 식, 쿼리 식은
this
의 인스턴스 멤버에 액세스할 수 없습니다. - CS1686: 지역 변수 또는 해당 멤버의 주소를 가져와 무명 메서드 또는 람다 식 안에 사용할 수 없습니다.
- CS8175: 무명 메서드, 람다 식 또는 쿼리 식에 ref 로컬을 사용할 수 없습니다.
다음 구문은 모두 람다 식에서 허용되지 않습니다.
yield
문(yield return
또는yield break
)in
,ref
또는out
매개 변수가 있는 메서드 호출ref
지역 변수break
,goto
,continue
문this
가struct
형식인 경우this
액세스- 특성 생성자와 같은 다른 식 내의 무명 메서드 또는 람다 식.
람다 식이나 무명 메서드에는 이러한 구문을 사용할 수 없습니다. 대부분은 로컬 함수에서 허용됩니다.
또한 보간된 문자열 처리기 형식은 람다 매개 변수에 적용될 때 무시됩니다. 사용하는 경우 다음과 같은 경고가 표시됩니다.
- CS8971: InterpolatedStringHandlerArgument는 람다 매개 변수에 적용할 때 효과가 없으며 호출 사이트에서 무시됩니다.
람다 식 매개 변수 및 반환
다음 오류는 매개 변수 선언에 문제가 있음을 나타냅니다.
- CS0748: 람다 매개 변수가 일관성 없이 사용되었습니다. 매개 변수 형식은 모두 명시적이거나 모두 암시적이어야 합니다.
- CS9098: 암시적 형식 람다 매개 변수 '...'은 기본값을 가질 수 없습니다.
- CS8030: void 반환 대리자로 변환된 무명 함수는 값을 반환할 수 없습니다.
- CS8916: 람다 식의 특성에는 괄호로 묶인 매개 변수 목록이 필요합니다.
- CS8975: 상황별 키워드 'var'은 명시적 람다 반환 형식으로 사용할 수 없습니다.
람다 식 매개 변수는 다음 규칙을 따라야 합니다.
- 람다 식에 여러 매개 변수가 있는 경우 모든 매개 변수를 명시적으로 형식화하거나 모든 매개 변수를 암시적으로 형식화해야 합니다.
- 기본값이 있는 모든 람다 매개 변수는 명시적으로 형식화해야 합니다.
- 특성이 매개 변수에 적용되는 경우 매개 변수 목록을 괄호로 묶어야 합니다.
람다 식의 반환 형식은 다음 규칙을 따라야 합니다.
- 값을 반환하는 람다 식은
Action
과 같은void
반환 대리자로 변환할 수 없습니다. - 반환 형식은 유추되거나 명시적 형식입니다.
var
키워드를 사용하여 선언된 반환 형식은 허용되지 않습니다.
람다 식 대리자 형식
- CS9099: 경고: 기본 매개 변수 값이 대상 대리자 형식에서 일치하지 않습니다.
기본값을 선언하거나 람다 식 매개 변수를 사용하여 params
한정자를 추가하는 경우 대리자 형식은 Func
또는 Action
형식 중 하나가 아닙니다. 대신 기본 매개 변수 값 또는 params
한정자를 포함하는 사용자 지정 형식입니다. 다음 코드는 기본 매개 변수가 있는 람다 식을 Action
형식에 할당하기 때문에 경고를 생성합니다.
Action<int> a1 = (int i = 2) => { };
Action<string[]> a3 = (params string[] s) => { };
오류를 해결하려면 기본 매개 변수를 제거하거나 대리자 형식으로 암시적으로 형식화된 변수를 사용합니다.
Action<int> a1 = (int i) => { };
var a2 = (int i = 2) => { };
Action<string[]> a3 = (string[] s) => { };
var a4 = (params string[] s) => { };
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET