영어로 읽기

다음을 통해 공유


메서드 매개 변수의 params 한정자와 관련된 오류 및 경고

lock 문 및 스레드 동기화와 관련된 몇 가지 오류가 있습니다.

  • CS0225: params 매개 변수는 1차원 배열이어야 하며 유효한 컬렉션 형식이 있어야 합니다.
  • CS0231: params 매개 변수는 정식 매개 변수 목록에서 마지막에 있어야 합니다.
  • CS0466: 'method1'이 없어 'method2'에 params 매개 변수를 사용할 수 없습니다.
  • CS0674: System.ParamArrayAttribute 또는 System.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttribute를 사용하지 마세요. 대신 params 키워드를 사용합니다.
  • CS0758: 두 부분 메서드 선언 모두 params 매개 변수를 사용하거나 params 매개 변수를 사용할 수 없습니다.
  • CS1104: 매개 변수 배열은 확장 메서드의 this 한정자와 함께 사용할 수 없습니다.
  • CS1611: params 매개 변수는 ref 또는 out으로 선언될 수 없습니다.
  • CS1670: 이 컨텍스트에서는 params를 사용할 수 없습니다.
  • CS1751: 매개 변수 배열의 기본값을 지정할 수 없습니다.
  • CS9218: 동적 형식의 인수가 사용되고 메서드에 비배열 params 컬렉션 매개 변수가 있으므로 메서드의 형식 인수를 사용에서 유추할 수 없습니다. 형식 인수를 명시적으로 지정해 보세요.
  • CS9223: params 컬렉션을 만들면 생성자 호출의 무한 체인이 발생합니다.
  • CS9224: 메서드는 params 컬렉션이 있는 멤버보다 덜 표시될 수 없습니다.
  • CS9225: 생성자는 필수 멤버를 초기화되지 않은 상태로 둡니다.
  • CS9227: 형식에 적합한 인스턴스 Add 메서드에 대한 정의가 포함되어 있지 않습니다.
  • CS9228: 비배열 params 컬렉션 형식에는 인수 없이 호출할 수 있는 해당 생성자가 있어야 합니다.

메서드-선언 규칙

다음 오류는 해당 컨텍스트에서 params 한정자가 허용되지 않는 상황에서 매개 변수에 params 한정자를 사용하는 것을 나타냅니다.

  • CS0231: params 매개 변수는 정식 매개 변수 목록에서 마지막에 있어야 합니다.
  • CS1104: 매개 변수 배열은 확장 메서드의 this 한정자와 함께 사용할 수 없습니다.
  • CS1611: params 매개 변수는 ref 또는 out으로 선언될 수 없습니다.
  • CS1670: 이 컨텍스트에서는 params를 사용할 수 없습니다.
  • CS1751: 매개 변수 배열의 기본값을 지정할 수 없습니다.

컴파일러는 메서드 매개 변수에서 params 한정자를 사용할 때 다음 규칙을 적용합니다.

  • params 한정자는 공식 매개 변수 목록의 마지막 매개 변수에서만 허용됩니다. 여기에는 기본값이 있는 모든 매개 변수가 포함됩니다.
  • params 한정자를 사용하는 경우 매개 변수에 대한 기본 인수를 포함할 수 없습니다.
  • params 한정자는 참조 매개 변수에 적용할 수 없습니다. 참조 매개 변수는 in, ref readonly, ref 또는 out 한정자가 있는 매개 변수입니다.
  • params 한정자는 확장 메서드의 this 한정자와 함께 사용할 수 없습니다.
  • 오버로드된 연산자에서는 params 한정자를 사용할 수 없습니다.

C# 12 이전 버전에서는 무명 메서드 또는 람다 식의 매개 변수에 params 한정자를 사용할 수 없습니다.

매개 변수 및 인수 형식 규칙

다음 오류는 params와 함께 사용하는 매개 변수의 형식이 유효하지 않음을 나타냅니다.

  • CS9218: 동적 형식의 인수가 사용되고 메서드에 비배열 params 컬렉션 매개 변수가 있으므로 메서드의 형식 인수를 사용에서 유추할 수 없습니다. 형식 인수를 명시적으로 지정해 보세요.
  • CS0225: params 매개 변수는 1차원 배열이어야 하며 유효한 컬렉션 형식이 있어야 합니다.
  • CS9227: 형식에 적합한 인스턴스 Add 메서드에 대한 정의가 포함되어 있지 않습니다.
  • CS9228: 비배열 params 컬렉션 형식에는 인수 없이 호출할 수 있는 해당 생성자가 있어야 합니다.

C# 13 이전 버전에서는 1차원 배열에서만 params 한정자가 허용됩니다. 다른 형식은 유효하지 않았습니다.

C# 13부터 유효한 컬렉션 형식을 사용할 수 있습니다. 그러나 일부 제한 사항은 남아 있습니다. 컬렉션 형식은 컬렉션 식의 대상과 동일한 규칙을 따라야 합니다.

기타 매개 변수 오류

다음 오류는 params 한정자 사용과 관련된 그밖의 문제를 나타냅니다.

  • CS0466: ‘method1'이 없어 'method2'에 params 매개 변수를 사용할 수 없습니다.
  • CS0674: System.ParamArrayAttribute 또는 System.Runtime.CompilerServices.ParamCollectionAttribute를 사용하지 마세요. 대신 params 키워드를 사용합니다.
  • CS0758: 두 부분 메서드 선언 모두 params 매개 변수를 사용해야 하거나 params 매개 변수를 사용할 수 없습니다.
  • CS9223: params 컬렉션을 만들면 생성자 호출의 무한 체인이 발생합니다.
  • CS9224: 메서드는 params 컬렉션이 있는 멤버보다 덜 표시될 수 없습니다.
  • CS9225: 생성자는 필수 멤버를 초기화되지 않은 상태로 둡니다.

인터페이스를 구현하는 메서드는 인터페이스 멤버에 params 한정자가 있는 경우에만 params 한정자를 포함해야 합니다. 마찬가지로 partial 메서드의 두 선언 모두 params 한정자를 포함해야 하거나 params 한정자를 포함할 수 없습니다.

params 한정자를 사용해야 합니다. 해당하는 특성인 System.ParamArrayAttribute 또는 System.Runtime.CompilerServices.ParamCollectionAttribute를 적용할 수 없습니다.

컴파일러는 컬렉션 형식을 만들기 위해 생성된 코드가 유효하지 않은 경우 이전 목록에서 마지막 세 가지 오류 중 하나를 생성합니다.

  • 컴파일러는 컬렉션을 만들기 위해 내보낸 코드에 동일한 형식의 params 컬렉션도 포함된 경우 CS9223을 내보냅니다. 일반적으로 Add 메서드는 동일한 형식의 params 컬렉션을 사용합니다.
  • 컬렉션 형식에 대한 Create 메서드가 컬렉션 형식의params 매개 변수를 사용하는 메서드보다 접근성이 낮은 경우 컴파일러는 CS9224를 내보냅니다.
  • 컴파일러는 컬렉션 형식에 필수 멤버가 있고 매개 변수가 없는 생성자가 해당 멤버를 초기화하지 않고 매개 변수가 없는 생성자에 System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute가 있는 경우 CS9225를 내보냅니다.

참고 항목