次の方法で共有


メソッド パラメーター上の params 修飾子に関連するエラーと警告

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 修飾子を参照パラメーターに適用することはできません。 参照パラメーターには、inref readonlyref、または 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 が出力されます。

関連項目