Udostępnij za pośrednictwem


Błędy i ostrzeżenia związane z modyfikatorem params parametrów metody

Istnieje kilka błędów związanych z instrukcją i synchronizacją lock wątków:

  • CS0225: Parametr parametrów musi być tablicą jednowymiarową lub mieć prawidłowy typ kolekcji
  • CS0231: Parametr params musi być ostatnim parametrem na liście parametrów formalnych.
  • CS0466: "method1" nie powinien mieć parametru params, ponieważ "method2" nie
  • CS0674: Nie używaj System.ParamArrayAttribute ani System.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttribute. Zamiast tego użyj słowa kluczowego params .
  • CS0758: Obie deklaracje metody częściowej muszą używać parametru params lub nie mogą używać parametru params
  • CS1104: Tablica parametrów nie może być używana z this modyfikatorem w metodzie rozszerzenia.
  • CS1611: Parametr params nie może być zadeklarowany jako w ref lub out
  • CS1670: params jest nieprawidłowy w tym kontekście
  • CS1751: Nie można określić wartości domyślnej dla tablicy parametrów.
  • CS9218: Argumenty typu dla metody nie mogą być wnioskowane z użycia, ponieważ jest używany argument z typem dynamicznym, a metoda ma parametr kolekcji params bez tablicy. Spróbuj jawnie określić argumenty typu.
  • CS9223: Tworzenie kolekcji params powoduje nieskończony łańcuch wywołania konstruktora.
  • CS9224: Metoda nie może być mniej widoczna niż składowa z kolekcją params.
  • CS9225: Konstruktor pozostawia wymagany element członkowski niezainicjowany.
  • CS9227: Typ nie zawiera definicji odpowiedniej metody wystąpienia Add .
  • CS9228: Typ kolekcji params bez tablicy musi mieć odpowiedni konstruktor, który może być wywoływany bez argumentów.

Reguły deklaracji metody

Następujące błędy wskazują użycie params modyfikatora dla parametru, gdy params modyfikator nie jest dozwolony w tym kontekście:

  • CS0231: Parametr params musi być ostatnim parametrem na liście parametrów formalnych.
  • CS1104: Tablica parametrów nie może być używana z this modyfikatorem w metodzie rozszerzenia.
  • CS1611: Parametr params nie może być zadeklarowany jako w ref lub out
  • CS1670: params jest nieprawidłowy w tym kontekście
  • CS1751: Nie można określić wartości domyślnej dla tablicy parametrów.

Kompilator wymusza następujące reguły dotyczące używania params modyfikatora dla parametru metody:

  • Modyfikator params jest dozwolony tylko na ostatnim parametrze na liście parametrów formalnych. Obejmuje to wszystkie parametry z wartością domyślną.
  • Nie można dołączyć domyślnego argumentu dla parametru params , gdy modyfikator jest używany.
  • Modyfikator params nie może być stosowany do parametru odwołania. Parametr odwołania jest jednym z modyfikatorem in, ref readonlyref lub out .
  • Modyfikator params nie może być połączony z this modyfikatorem w metodzie rozszerzenia.
  • Modyfikator params nie może być używany dla przeciążonego operatora.

W wersjach wcześniejszych niż C# 12 params modyfikator nie może być używany w parametrze metody anonimowej ani wyrażenia lambda.

Reguły typów parametrów i argumentów

Następujące błędy wskazują, że typ parametru używanego z params programem jest nieprawidłowy:

  • CS9218: Argumenty typu dla metody nie mogą być wnioskowane z użycia, ponieważ jest używany argument z typem dynamicznym, a metoda ma parametr kolekcji params bez tablicy. Spróbuj jawnie określić argumenty typu.
  • CS0225: Parametr parametrów musi być tablicą jednowymiarową lub mieć prawidłowy typ kolekcji
  • CS9227: Typ nie zawiera definicji odpowiedniej metody wystąpienia Add .
  • CS9228: Typ kolekcji params bez tablicy musi mieć odpowiedni konstruktor, który może być wywoływany bez argumentów.

W wersjach wcześniejszych niż C# 13 params modyfikator jest dozwolony tylko w tablicach jednowymiarowych. Żadne inne typy nie były prawidłowe.

Począwszy od języka C# 13, można użyć dowolnego prawidłowego typu kolekcji. Jednak niektóre ograniczenia pozostają. Typ kolekcji musi być zgodny z tymi samymi regułami co element docelowy wyrażenia kolekcji.

Inne błędy parametrów

Następujące błędy wskazują inne problemy z używaniem params modyfikatora:

  • CS0466: "method1" nie powinien mieć parametru params, ponieważ "method2" nie
  • CS0674: Nie używaj System.ParamArrayAttribute ani System.Runtime.CompilerServices.ParamCollectionAttribute. Zamiast tego użyj słowa kluczowego params .
  • CS0758: Obie deklaracje metody częściowej muszą używać parametru params lub nie mogą używać parametru params
  • CS9223: Tworzenie kolekcji params powoduje nieskończony łańcuch wywołania konstruktora.
  • CS9224: Metoda nie może być mniej widoczna niż składowa z kolekcją params.
  • CS9225: Konstruktor pozostawia wymagany element członkowski niezainicjowany.

Metoda, która implementuje interfejs, musi zawierać params modyfikator, jeśli i tylko wtedy, gdy element członkowski interfejsu params ma modyfikator. Podobnie obie deklaracje partial metody muszą zawierać params modyfikator lub żaden z nich nie może zawierać params modyfikatora.

Należy użyć params modyfikatora. Nie można zastosować równoważnych atrybutów ani System.ParamArrayAttribute System.Runtime.CompilerServices.ParamCollectionAttribute.

Kompilator generuje jeden z trzech ostatnich błędów na poprzedniej liście, gdy kod wygenerowany w celu utworzenia typu kolekcji jest nieprawidłowy:

  • Kompilator emituje cs9223 , gdy kod emitowany do utworzenia kolekcji zawiera również kolekcję parametrów tego samego typu. Add Zazwyczaj metoda przyjmuje params kolekcję tego samego typu.
  • Kompilator emituje CS9224 , gdy Create metoda typu kolekcji jest mniej dostępna niż metoda, która przyjmuje params parametr typu kolekcji.
  • Kompilator emituje cs9225 , gdy typ kolekcji ma wymagany element członkowski, a konstruktor bez parametrów nie inicjuje tego elementu członkowskiego i ma System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute parametr konstruktor bez parametrów.

Zobacz też