C# 컴파일러는 잘못된 구문으로 문자열 보간 식 또는 문자열 보간 처리기를 선언하거나 지원되지 않는 컨텍스트에서 사용할 때 오류 및 경고를 생성합니다. 이러한 진단은 문자열 보간 또는 사용자 지정 문자열 보간 처리기의 문제를 식별하는 데 도움이 됩니다.
- CS8361: 조건식은 ':'이 보간을 종료하므로 문자열 보간에서 직접 사용할 수 없습니다. 조건식을 괄호로 괄호로 줍니다.
- CS8941: 보간된 문자열 처리기 메서드의 형식이 잘못되었습니다. 'void' 또는 'bool'을 반환하지 않습니다.
- CS8942: 보간된 문자열 처리기 메서드의 반환 형식이 일치하지 않습니다. 다른 형식을 반환해야 합니다.
- CS8946: 형식은 보간된 문자열 처리기 타입이 아닙니다.
- CS8947: 매개 변수는 매개 변수 목록에서 보간된 문자열 처리기 매개 변수 후에 발생하지만 보간된 문자열 처리기 변환에 대한 인수로 사용됩니다. 이렇게 하려면 호출자가 호출 사이트에서 명명된 인수를 사용하여 매개 변수의 순서를 다시 지정해야 합니다. 관련된 모든 인수 후에 보간된 문자열 처리기 매개 변수를 배치하는 것이 좋습니다.
- CS8953: 보간된 문자열 처리기 생성은 동적을 사용할 수 없습니다. 대신 인스턴스를 수동으로 생성합니다.
- CS8976: 인덱싱되는 인스턴스를 참조하는 보간된 문자열 처리기 변환은 인덱서 멤버 이니셜라이저에서 사용할 수 없습니다.
- CS9205: 보간된 문자열이 필요합니다.
- CS9325: 보간된 문자열 처리기 인수는 이 컨텍스트에서 허용되지 않습니다.
보간 식 구문
- CS8361 - 조건식은 ':'가 보간을 종료하므로 문자열 보간에서 직접 사용할 수 없습니다. 조건식을 괄호로 괄호로 줍니다.
- CS9205 - 보간된 문자열이 필요합니다.
이러한 오류를 수정하려면 다음 기술을 적용합니다.
- 보간 구멍(
?:) 내에서 사용할 때 조건식(3차 연산자)을 괄호로 래핑합니다. 콜론 문자는 보간된 문자열에서 형식 문자열을 도입하는 특별한 의미를 가집니다. 따라서 컴파일러는:를 조건식의 일부가 아닌condition ? true : false의 형식 지정자로 해석합니다. 예를 들어$"{(x > 0 ? "positive" : "negative")}"대신$"{x > 0 ? "positive" : "negative"}"을 사용합니다. - 예상되는 보간된 문자열 리터럴(CS9205)을 반드시 제공해야 합니다. 이 오류는 컴파일러가
$"또는$@"로 시작하는 보간된 문자열을 예상하지만 다른 식 형식을 발견할 때 발생합니다.
보간된 문자열 관리 형식 구현
- CS8941 - 보간된 문자열 처리기 메서드의 형식이 잘못되었습니다. 'void' 또는 'bool'을 반환하지 않습니다.
- CS8942 - 보간된 문자열 처리기 메서드의 반환 형식이 일치하지 않습니다. 예상된 다른 형식을 반환해야 합니다.
- CS8946 - 형식이 보간된 문자열 처리기 형식이 아닙니다.
사용자 지정 보간된 문자열 처리기를 구현하는 경우 다음 기술을 적용합니다.
- 모든
AppendLiteral및AppendFormatted메서드는void또는bool를 반환해야 합니다 (CS8941). 처리기 패턴을 사용하려면 컴파일러가 보간 코드를 제대로 생성할 수 있도록 이러한 메서드에 이러한 반환 형식 중 하나가 있어야 합니다.bool을(를) 반환하는 메서드는 처리기가 추가 처리가 필요하지 않다고 판단하면 단락 평가를 허용합니다. - 처리기 형식의 모든 추가 메서드가 동일한 반환 형식(CS8942)을 사용하는지 확인합니다. 한 메서드가 반환
void되면 모든 추가 메서드가 반환void되어야 합니다.bool을(를) 반환하는 경우, 모두bool을(를) 반환해야 합니다. 반환 형식을 혼합하면 컴파일러가 일관된 보간 코드를 생성할 수 없게 됩니다. - 처리기 형식에 InterpolatedStringHandlerAttribute 적용하고 유효한 생성자(CS8946)가 있는지 확인합니다. 보간된 문자열 처리기 형식은 이 특성으로 표시되어야 하며 컴파일러에서 인식할 처리기 패턴을 따라야 합니다.
보간된 문자열 처리기 사용 제한
- CS8947 - 매개 변수는 매개 변수 목록에서 보간된 문자열 처리기 매개 변수 후에 발생하지만 보간된 문자열 처리기 변환에 대한 인수로 사용됩니다. 이렇게 하려면 호출자가 호출 사이트에서 명명된 인수를 사용하여 매개 변수의 순서를 다시 지정해야 합니다. 관련된 모든 인수 후에 보간된 문자열 처리기 매개 변수를 배치하는 것이 좋습니다.
- CS8953 - 보간된 문자열 처리기 생성은 동적을 사용할 수 없습니다. ''{0}의 인스턴스를 수동으로 생성합니다.
- CS8976 - 인덱싱되는 인스턴스를 참조하는 보간된 문자열 처리기 변환은 인덱서 멤버 이니셜라이저에서 사용할 수 없습니다.
- CS9325 - 보간된 문자열 처리기 인수는 이 컨텍스트에서 허용되지 않습니다.
보간된 문자열 처리기를 사용하는 경우 다음 기법을 적용하세요.
- InterpolatedStringHandlerArgumentAttribute에서 사용되는 매개 변수가 보간된 문자열 처리기 매개 변수(CS8947) 앞에 나타나도록 메서드 매개 변수의 순서를 변경합니다. 이 경고는 호출자가 메서드를 올바르게 호출하기 위해 명명된 인수를 사용해야 하므로 유용성이 감소한다는 것을 나타냅니다. 모든 인수 다음에 처리기 매개 변수를 배치합니다.
- 형식화된
dynamic값을 문자열 보간 처리기 변환에 대한 인수로 사용하지 마세요(CS8953). 컴파일러는 동적 값이 관련된 경우 컴파일 시간에 처리기의 생성 요구 사항을 확인할 수 없습니다. 대신 처리기 인스턴스를 수동으로 생성하고 해당 메서드를 직접 호출합니다. - 인덱서 멤버 이니셜라이저(CS8976)에서 초기화되는 인스턴스를 참조하는 보간된 문자열을 사용하지 마세요. 개체 초기화 중에는 인스턴스가 완전히 생성되지 않으므로 인스턴스를 참조
this하는 처리기 변환은 허용되지 않습니다. 초기화 후 별도의 문을 사용하여 인덱서 값을 설정합니다. - 보간된 문자열 처리기 인수를 사용하는 컨텍스트를 확인합니다(CS9325). 일부 컨텍스트는 처리기 인수 특성을 지원하지 않습니다. 이러한 경우, 일반 보간 문자열을 사용하거나 핸들러를 수동으로 구성합니다.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET