다음을 통해 공유


매개 변수와 인수 불일치

정식 매개 변수에 대해 제공된 인수가 없거나 해당 매개 변수에 대한 인수가 유효하지 않으면 컴파일러에서 다음 오류를 생성합니다.

  • CS0182: 특성 인수는 특성 매개 변수 형식의 배열 생성 식, 상수 식 또는 typeof 식이어야 합니다.
  • CS0591: 특성에 대한 인수 값이 잘못되었습니다.
  • CS0599: 명명된 특성 인수 'argument'에 대해 잘못된 값입니다.
  • CS0617: 명명된 특성 인수가 유효하지 않습니다. 명명된 특성 인수는 readonly, static 또는 const가 아닌 필드이거나 static이 아닌 public 읽기/쓰기 속성이어야 합니다.
  • CS0633: 특성에 대한 인수는 유효한 식별자여야 합니다.
  • CS0643: 중복 명명된 특성 인수입니다.
  • CS0655: 특성 매개 변수 형식이 유효하지 않으므로 명명된 특성 인수가 유효하지 않습니다.
  • CS0839: 인수가 없습니다.
  • CS1016: 명명된 특성 인수가 필요합니다.
  • CS1739: :가장 적합한 오버로드에 명명된 매개 변수가 없습니다.
  • CS1740: 명명된 인수를 여러 번 지정할 수 없습니다.
  • CS1742: 배열 액세스에는 명명된 인수 지정자를 사용할 수 없습니다.
  • CS1744: 명명된 인수는 위치 인수가 이미 지정된 매개 변수를 지정합니다.
  • CS1746: 대리자에 'name'으로 명명된 매개 변수가 없습니다.
  • CS7036: 필요한 매개 변수에 해당하는 인수가 제공되지 않았습니다.
  • CS7067: 특성 생성자 매개 변수는 선택 사항이지만, 기본 매개 변수 값은 지정되지 않았습니다.
  • CS8324: 명명된 인수 사양은 동적 호출에서 모든 고정 인수를 지정한 후에 표시되어야 합니다.
  • CS8905: 함수 포인터는 명명된 인수를 사용하여 호출할 수 없습니다.
  • CS8943: null은 유효한 매개 변수 이름이 아닙니다. 인스턴스 메서드의 수신자에 액세스하려면 빈 문자열을 매개 변수 이름으로 사용하세요.
  • CS8944: 메서드가 인스턴스 메서드가 아니며, 수신기는 보간된 문자열 처리기 인수가 될 수 없습니다.
  • CS8945: 유효한 매개 변수 이름이 아닙니다.
  • CS8948: InterpolatedStringHandlerArgumentAttribute 인수는 특성이 사용되는 매개 변수를 참조할 수 없습니다.
  • CS8949: 매개 변수에 적용된 InterpolatedStringHandlerArgumentAttribute 형식이 잘못되어 해석할 수 없습니다. 인스턴스를 수동으로 생성하세요.
  • CS8950: 매개 변수는 매개 변수에서 보간된 문자열 처리기 변환에 대한 인수이지만, 해당 인수는 보간된 문자열 식 뒤에 지정됩니다. 인수의 순서를 다시 지정하세요.
  • CS8951: 매개 변수는 명시적으로 제공되지 않지만, 매개 변수의 보간된 문자열 처리기 변환에 대한 인수로 사용됩니다.
  • CS8964: CallerArgumentExpressionAttribute은(는) 기본값이 있는 매개 변수에만 적용할 수 있습니다.
  • CS8965: 매개 변수에 적용된 CallerArgumentExpressionAttribute은(는) 자체 참조이므로 영향을 주지 않습니다.
  • CS8966: CallerArgumentExpressionAttribute은(는) 선택적 인수를 허용하지 않는 컨텍스트에서 사용되는 멤버에 적용되므로 효과가 없습니다.

인수 누락

컴파일러가 인수를 모든 멤버 매개 변수에 일치시킬 수 없을 때 다음과 같은 일반적인 오류가 발생합니다.

  • CS0839: 인수가 없습니다.
  • CS7036: 필요한 매개 변수에 해당하는 인수가 제공되지 않았습니다.

이러한 오류는 일반적입니다. 컴파일러는 메서드 호출에 지정된 인수와 메서드의 필수 매개 변수를 일치시킬 수 없습니다. 다음 원인을 확인하세요.

  • 필요한 모든 인수를 포함했는지 확인합니다.
  • 인수가 올바른 순서인지 확인합니다.
  • 모든 인수가 올바른 형식인지 확인합니다.
  • 오버로드 해결 규칙이 예상한 메서드를 선택했는지 확인합니다.

오버로드된 로컬 함수를 작성한 경우에도 CS7036이 표시될 수 있습니다. 로컬 함수는 오버로드할 수 없습니다. 컴파일러는 해당 이름의 첫 번째 로컬 함수만 인식합니다. 다른 로컬 함수를 호출하려는지 확인합니다.

이러한 오류는 종종 올바른 원인을 진단하는 데 도움이 될 수 있는 다른 진단 함께 나타납니다.

특성에 대한 인수

특성 생성자에 대한 인수가 올바르지 않으면 컴파일러에서 다음 오류를 발생시킵니다.

  • CS0182: 특성 인수는 특성 매개 변수 형식의 배열 생성 식, 상수 식 또는 typeof 식이어야 합니다.
  • CS0591: 특성에 대한 인수 값이 잘못되었습니다.
  • CS0599: 명명된 특성 인수 'argument'에 대해 잘못된 값입니다.
  • CS0617: 명명된 특성 인수가 유효하지 않습니다. 명명된 특성 인수는 readonly, static 또는 const가 아닌 필드이거나 static이 아닌 public 읽기/쓰기 속성이어야 합니다.
  • CS0633: 특성에 대한 인수는 유효한 식별자여야 합니다.
  • CS0643: 중복 명명된 특성 인수입니다.
  • CS0655: 특성 매개 변수 형식이 유효하지 않으므로 명명된 특성 인수가 유효하지 않습니다.

특성 정의에서 System.AttributeUsageAttribute을(를) 사용하는 경우 허용되는 값이 상호 배타적이지 않은지 확인합니다. 특성에 대한 인수의 형식과 순서가 올바른지 확인합니다. 문자열 인수의 텍스트가 유효한지 확인합니다. 많은 특성의 경우 인수는 유효한 C# 식별자여야 합니다. 특성 생성자에 대한 인수는 컴파일 시간 상수여야 합니다. 따라서 리터럴 상수는 지원하는 형식으로 제한됩니다. 또한 리터럴 상수를 허용하는 다음 형식은 특성 매개 변수로 허용되지 않습니다.

동일한 매개 변수 이름을 사용하여 반복되는 명명된 인수를 지정할 수 없습니다. 특성을 초기화할 때만 액세스 가능한 속성을 설정할 수 있습니다. 프라이빗 속성을 설정할 수 없습니다.

명명된/선택적 매개 변수 및 인수

명명된 인수와 선택적 인수가 잘못 사용되면 컴파일러에서 다음 오류를 발생시킵니다.

  • CS1016: 명명된 특성 인수가 필요합니다.
  • CS1739: :가장 적합한 오버로드에 명명된 매개 변수가 없습니다.
  • CS1740: 명명된 인수를 여러 번 지정할 수 없습니다.
  • CS1742: 배열 액세스에는 명명된 인수 지정자를 사용할 수 없습니다.
  • CS1744: 명명된 인수는 위치 인수가 이미 지정된 매개 변수를 지정합니다.
  • CS1746: 대리자에 'name'으로 명명된 매개 변수가 없습니다.
  • CS7067: 특성 생성자 매개 변수는 선택 사항이지만, 기본 매개 변수 값은 지정되지 않았습니다.
  • CS8324: 명명된 인수 사양은 동적 호출에서 모든 고정 인수를 지정한 후에 표시되어야 합니다.
  • CS8905: 함수 포인터는 명명된 인수를 사용하여 호출할 수 없습니다.

이러한 오류의 다음과 같은 원인을 확인하세요.

  • 명명된 인수의 매개 변수 이름이 잘못되었습니다.
  • 선택한 오버로드에는 명명된 인수와 일치하는 매개 변수가 없습니다.
  • 매개 변수 이름이 둘 이상의 인수에서 반복됩니다.
  • 위치 인수(명명되지 않은 인수)가 명명된 인수 뒤의 나타납니다.
  • 배열 인덱스 매개 변수에는 명명된 인수가 허용되지 않습니다.

보간된 문자열 처리기

보간된 문자열 처리기를 잘못 지정하면 컴파일러에서 다음 오류를 발생시킵니다.

  • CS8943: null은 유효한 매개 변수 이름이 아닙니다. 인스턴스 메서드의 수신자에 액세스하려면 빈 문자열을 매개 변수 이름으로 사용하세요.
  • CS8944: 인스턴스 메서드가 아니므로 수신기는 보간된 문자열 처리기 인수가 될 수 없습니다.
  • CS8945: 유효한 매개 변수 이름이 아닙니다.
  • CS8948: InterpolatedStringHandlerArgumentAttribute 인수는 특성이 사용되는 매개 변수를 참조할 수 없습니다.
  • CS8949: 매개 변수에 적용된 InterpolatedStringHandlerArgumentAttribute이(가) 형식이 잘못되어 해석할 수 없습니다. 인스턴스를 수동으로 생성하세요.
  • CS8950: 매개 변수는 매개 변수에서 보간된 문자열 처리기 변환에 대한 인수이지만, 해당 인수는 보간된 문자열 식 뒤에 지정됩니다.
  • CS8951: 매개 변수는 명시적으로 제공되지 않지만, 매개 변수의 보간된 문자열 처리기 변환에 대한 인수로 사용됩니다.

보간된 문자열 처리기는 패턴 기반 구문입니다. 패턴을 올바르게 지정하는 것이 중요합니다. 기능 사양을 참조하거나 보간된 문자열 처리기 빌드에 대한 자습서를 따르세요.

호출자 디버깅 정보

System.Runtime.CompilerServices.CallerArgumentExpressionAttribute을(를) 잘못 사용하면 컴파일러에서 다음과 같은 오류를 발생시킵니다.

  • CS8964: CallerArgumentExpressionAttribute은(는) 기본값이 있는 매개 변수에만 적용할 수 있습니다.

또한 CallerArgumentExpressionAttribute을(를) 잘못 사용하는 경우 컴파일러에서 다음과 같은 경고를 발생시킵니다.

  • CS8965: 매개 변수에 적용된 CallerArgumentExpressionAttribute은(는) 자체 참조이므로 영향을 주지 않습니다.
  • CS8966: CallerArgumentExpressionAttribute은(는) 선택적 인수를 허용하지 않는 컨텍스트에서 사용되는 멤버에 적용되므로 효과가 없습니다.

CallerArgumentExpression 특성으로 주석이 추가된 매개 변수에는 기본값이 있어야 합니다.