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
aniSystem.ParamArrayAttribute
/System.Runtime.CompilerServices.ParamCollectionAttribute
. Zamiast tego użyj słowa kluczowegoparams
. - CS0758: Obie deklaracje metody częściowej muszą używać parametru
params
lub nie mogą używać parametruparams
- 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
lubout
- 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
lubout
- 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 modyfikatoremin
,ref readonly
ref
lubout
. - Modyfikator
params
nie może być połączony zthis
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
aniSystem.Runtime.CompilerServices.ParamCollectionAttribute
. Zamiast tego użyj słowa kluczowegoparams
. - CS0758: Obie deklaracje metody częściowej muszą używać parametru
params
lub nie mogą używać parametruparams
- 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 przyjmujeparams
kolekcję tego samego typu. - Kompilator emituje CS9224 , gdy
Create
metoda typu kolekcji jest mniej dostępna niż metoda, która przyjmujeparams
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.