Ошибки и предупреждения, связанные с модификатором params
для параметров метода
Существует несколько ошибок , связанных с инструкцией lock
и синхронизацией потоков:
- CS0225: параметр params должен быть одномерным массивом или иметь допустимый тип коллекции
- CS0231: параметр params должен быть последним параметром в формальном списке параметров.
- CS0466: method1 не должен иметь параметр params, так как метод2 не имеет
- 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
ref readonly
.out
params
Модификатор не может сочетаться сthis
модификатором метода расширения.params
Модификатор нельзя использовать в перегруженном операторе.
В версиях до C# 12 params
модификатор нельзя использовать для параметра анонимного метода или лямбда-выражения.
Правила типа параметров и аргументов
Следующие ошибки указывают, что тип используемого params
параметра недопустим:
- CS9218: аргументы типа для метода не могут быть выведены из использования, так как используется аргумент с динамическим типом, а метод имеет параметр коллекции params, отличный от массива. Попробуйте явно указать аргументы типа.
- CS0225: параметр params должен быть одномерным массивом или иметь допустимый тип коллекции
- CS9227: тип не содержит определения для подходящего метода экземпляра
Add
. - CS9228: тип коллекции params, отличный от массива, должен иметь применимый конструктор, который можно вызывать без аргументов.
В версиях до C# 13 params
модификатор разрешен только в одномерных массивах. Другие типы не были допустимыми.
Начиная с C# 13 можно использовать любой допустимый тип коллекции. Однако некоторые ограничения остаются. Тип коллекции должен соответствовать тем же правилам, что и целевой объект выражения коллекции.
Другие ошибки парамс
Следующие ошибки указывают на другие проблемы с использованием params
модификатора:
- CS0466: method1 не должен иметь параметр params, так как метод2 не имеет
- CS0674: не используйте
System.ParamArrayAttribute
илиSystem.Runtime.CompilerServices.ParamCollectionAttribute
. Вместо этого используйте ключевоеparams
слово. - CS0758: оба объявления частичных методов должны использовать
params
параметр или не может использоватьparams
параметр. - CS9223: создание коллекции params приводит к бесконечной цепочке вызова конструктора.
- CS9224: метод не может быть менее видимым, чем член с коллекцией params.
- CS9225: конструктор оставляет обязательный элемент неинициализированным.
Метод, реализующий интерфейс, должен включать params
модификатор, если и только если элемент интерфейса имеет params
модификатор. Аналогичным образом оба объявления partial
метода должны включать params
модификатор, или ни один из них не может включать params
модификатор.
Необходимо использовать модификатор params
. Вы не можете применить эквивалентные атрибуты либо System.ParamArrayAttributeSystem.Runtime.CompilerServices.ParamCollectionAttribute.
Компилятор создает одну из последних трех ошибок в предыдущем списке, когда код, созданный для создания типа коллекции, недопустим:
- Компилятор выдает CS9223 , когда код, создаваемый для создания коллекции, также содержит коллекцию парам одного типа. Как правило,
Add
метод принимаетparams
коллекцию одного типа. - Компилятор выдает CS9224 , когда
Create
метод для типа коллекции менее доступен, чем метод,params
принимаюющий параметр типа коллекции. - Компилятор выдает CS9225 , когда тип коллекции имеет обязательный элемент, и конструктор без параметров не инициализирует этот элемент и имеет System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute конструктор без параметров.