与方法参数上的
与 lock
语句和线程同步相关的一些错误:
- CS0225:params 参数必须是一维数组或具有有效的集合类型
- CS0231:params 参数必须是形参列表中的最后一个参数。
- CS0466:由于“method2”没有 params 参数,因此“method1”也不应当有该参数
- CS0674:请勿使用
System.ParamArrayAttribute
或System.ParamArrayAttribute
/System.Runtime.CompilerServices.ParamCollectionAttribute
。请改用params
关键字。 - CS0758:两种分部方法声明必须要么都使用
params
参数,要么都不使用params
参数 - CS1104:参数数组不能与
this
修饰符一起在扩展方法中使用。 - CS1611:params 参数不能声明为 in
ref
或out
- CS1670:
params
在此上下文中无效 - CS1751:无法为参数数组指定默认值。
- CS9218:由于使用了具有动态类型的实参,并且该方法具有非数组 params 集合形参,因此无法从用法中推断出方法的类型参数。请尝试显式指定类型参数。
- CS9223:创建 params 集合会导致构造函数的无限调用链。
- CS9224:方法的可见性不能低于具有 params 集合的成员。
- CS9225:构造函数未初始化所需的成员。
- CS9227:类型不包含适当实例
Add
方法的定义。 - CS9228:非数组 params 集合类型必须具有可以不带参数调用的适用构造函数。
方法声明规则
以下错误表明在参数上使用 params
修饰符,而该上下文中不允许使用 params
修饰符:
- CS0231:params 参数必须是形参列表中的最后一个参数。
- CS1104:参数数组不能与
this
修饰符一起在扩展方法中使用。 - CS1611:params 参数不能声明为 in
ref
或out
- CS1670:
params
在此上下文中无效 - CS1751:无法为参数数组指定默认值。
编译器对在方法参数上使用 params
修饰符强制执行以下规则:
params
修饰符仅可用于形参列表中的最后一个参数。 这包括具有默认值的任何参数。- 使用
params
修饰符时,不能包含形参的默认实参。 params
修饰符不能应用于引用参数。 引用参数是具有in
、ref readonly
、ref
或out
修饰符的参数。- 不能在扩展方法上组合
params
修饰符和this
修饰符。 params
修饰符不能用于重载运算符。
在 C# 12 之前的版本中,params
修饰符不能用于匿名方法或 lambda 表达式的参数。
形参和实参类型规则
以下错误指示用于 params
的参数类型无效:
- CS9218:由于使用了具有动态类型的实参,并且该方法具有非数组 params 集合形参,因此无法从用法中推断出方法的类型参数。请尝试显式指定类型参数。
- CS0225:params 参数必须是一维数组或具有有效的集合类型
- CS9227:类型不包含适当实例
Add
方法的定义。 - CS9228:非数组 params 集合类型必须具有可以不带参数调用的适用构造函数。
在 C# 13 之前的版本中,params
修饰符仅适用于一维数组。 其他类型均无效。
从 C# 13 开始,可以使用任何有效的集合类型。 但是,仍存在一些限制。 集合类型必须遵循与集合表达式的目标相同的规则。
其他 params 错误
以下错误指示使用 params
修饰符的其他问题:
- CS0466:由于“method2”没有 params 参数,因此“method1”也不应当有该参数
- 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。