メソッド パラメーター上の
lock ステートメントとスレッド同期に関連し、いくつかのエラーがあります。
- CS0225: params パラメーターは 1 次元配列または有効なコレクション型とする必要があります
- CS0231: params パラメーターは、仮パラメーター リストの最後のパラメーターとする必要があります。
- CS0466: 'method1' に params パラメーターは不要です。'method2' にもないからです
- CS0674:
System.ParamArrayAttributeまたはSystem.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttributeを使用しないでください。代わりにparamsキーワードを使用します。 - CS0758: 2 つの部分メソッド宣言は、両方とも
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' に params パラメーターは不要です。'method2' にもないからです
- CS0674:
System.ParamArrayAttributeまたはSystem.Runtime.CompilerServices.ParamCollectionAttributeを使用しないでください。代わりにparamsキーワードを使用します。 - CS0758: 2 つの部分メソッド宣言は、両方とも
paramsパラメーターを使用するか、両方ともparamsパラメーターを使用しないかのいずれかである必要があります - CS9223: params コレクションを作成すると、コンストラクターの無限の呼び出しチェーンが発生します。
- CS9224: メソッドの可視性を、params コレクションを持つメンバーよりも小さくすることはできません。
- CS9225: コンストラクターによって、必須のメンバーがまだ初期化されていません。
インターフェイスを実装するメソッドには、インターフェイス メンバーに params 修飾子がある場合にのみ、params 修飾子を含める必要があります。 同様に、partial メソッドの両方の宣言に params 修飾子を含めるか、いずれの宣言にも params 修飾子を含めないようにする必要があります。
params 修飾子を使用する必要があります。 同等の属性 (System.ParamArrayAttribute または System.Runtime.CompilerServices.ParamCollectionAttribute) を適用することはできません。
コレクション型を作成するために生成されたコードが無効である場合は、前に示した一覧の最後の 3 つのエラーのいずれかがコンパイラによって生成されます。
- コレクションを作成するために生成されたコードにも、同じ型の params コレクションが含まれている場合、コンパイラから CS9223 が出力されます。 通常、
Addメソッドでは、同じ型のparamsコレクションを受け取ります。 - コレクション型に対する
Createメソッドが、コレクション型のparamsパラメーターを受け取るメソッドよりもアクセスしにくい場合、コンパイラから CS9224 が出力されます。 - コレクション型に必須のメンバーが含まれている場合、パラメーターなしのコンストラクターによってそのメンバーが初期化されておらず、パラメーターなしのコンストラクター上に System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute があるときは、コンパイラから CS9225 が出力されます。
関連項目
.NET