次の方法で共有


パラメーターと引数の不一致

仮パラメーターに引数が指定されていない場合、または引数がそのパラメーターに対して有効でない場合、コンパイラは次のエラーを生成します。

  • CS0182: 属性引数は、定数式、typeof 式、または属性パラメーター型の配列作成式である必要があります
  • CS0591: 属性への引数の値が無効
  • CS0599: 名前付き属性引数 'argument' の値が無効です
  • CS0617: 有効な名前付き属性引数ではありません。名前付き属性の引数は、読み取り専用、静的、または const、またはパブリックで静的ではない読み取り/書き込みプロパティではないフィールドである必要があります。
  • CS0633: 属性の引数は有効な識別子である必要があります
  • CS0643: 名前付き属性引数の重複
  • CS0655: 有効な名前付き属性引数ではありません。これは、有効な属性パラメーター型ではないためです
  • CS0839: 引数がありません。
  • CS1016: 名前付き属性引数が必要です
  • CS1739: 最適なオーバーロードには、 という名前のパラメーターがありません
  • CS1740: 名前付き引数を複数回指定することはできません
  • CS1742: 配列アクセスに名前付き引数指定子が含まれていない場合があります
  • CS1744: 名前付き引数は、位置指定引数が既に指定されているパラメーターを指定
  • CS1746: デリゲートに 'name' という名前のパラメーターがありません
  • CS7036: 必要なパラメーターに対応する引数がありません
  • CS7067: 属性コンストラクター パラメーターは省略可能ですが、既定のパラメーター値は指定されませんでした。
  • CS8324: 名前付き引数の指定は、動的呼び出しですべての固定引数が指定された後に指定する必要があります。
  • CS8905: 名前付き引数を使用して関数ポインターを呼び出すことはできません。
  • CS8943: null は有効なパラメーター名ではありません。インスタンス メソッドの受信側にアクセスするには、パラメーター名として空の文字列を使用します。
  • CS8944: メソッドはインスタンス メソッドではありません。受信側を挿入文字列ハンドラー引数にすることはできません。
  • CS8945: 有効なパラメーター名ではありません。
  • CS8948: InterpolatedStringHandlerArgumentAttribute 引数は、属性が使用されているパラメーターを参照できません。
  • CS8949: パラメーターに適用される InterpolatedStringHandlerArgumentAttribute の形式が正しくなっされておらず、解釈できません。そのインスタンスを手動で構築します。
  • CS8950: Parameter はパラメーターの補間文字列ハンドラー変換の引数ですが、対応する引数は補間文字列式の後に指定されます。引数の順序を変更します。
  • CS8951: Parameter は明示的に指定されていませんが、パラメーターの挿入文字列ハンドラー変換の引数として使用されます。
  • CS8964: CallerArgumentExpressionAttribute は、既定値を持つパラメーターにのみ適用できます
  • CS8965: パラメーターに適用される CallerArgumentExpressionAttribute は、自己参照であるため、効果はありません。
  • CS8966: 省略可能な引数を許可しないコンテキストで使用されるメンバーに適用されるため、CallerArgumentExpressionAttribute は無効になります

不足している引数

次の一般的なエラーは、コンパイラが引数をすべてのメンバー パラメーターと一致できない場合に発行されます。

  • CS0839: 引数がありません。
  • CS7036: 必要なパラメーターに対応する引数がありません

これらのエラーは一般的です。コンパイラは、メソッド呼び出しで指定された引数をメソッドの必須パラメーターと一致させる必要はありません。 次の原因を確認します。

  • 必要なすべての引数が含まれていることを確認します。
  • 引数が正しい順序であることを確認します。
  • すべての引数が正しい型であることを確認します。
  • オーバーロード解決規則で、予期したメソッドが選択されていることを確認します。

オーバーロードされたローカル関数を記述した場合は、CS7036 も表示される場合があります。 ローカル関数はオーバーロードできません。 コンパイラは、その名前を持つ最初のローカル関数のみを認識します。 別のローカル関数を呼び出すつもりかどうかを確認します。

これらのエラーは、多くの場合、正しい原因の診断に役立つ他の診断と共に表示されます。

属性の引数

属性コンストラクターの引数が正しくない場合、コンパイラは次のエラーを発行します。

  • CS0182: 属性引数は定数式、typeof 式、または属性パラメーター型の配列作成式である必要があります
  • CS0591: 属性への引数の値が無効
  • CS0599: 名前付き属性引数 'argument' の値が無効です
  • CS0617: 有効な名前付き属性引数ではありません。名前付き属性引数は、読み取り専用、静的、または const ではないフィールド、またはパブリックで静的ではない読み取り/書き込みプロパティである必要があります。
  • CS0633: 属性の引数は有効な識別子である必要があります
  • CS0643: 名前付き属性引数の重複
  • CS0655: は有効な属性パラメータの型ではないため、有効な名前付き属性引数ではありません

属性定義で System.AttributeUsageAttribute を使用する場合は、許可される値が相互に排他的でないことを確認します。 属性に対する引数の型と順序が正しいことを確認します。 文字列引数のテキストが有効であることを確認します。 多くの属性の場合、引数は有効な C# 識別子である必要があります。 属性コンストラクターの引数はコンパイル時定数である必要があります。 そのため、リテラル定数をサポートする型に限定されます。 さらに、リテラル定数を許可する次の型は、属性パラメーターとして許可されません。

同じパラメーター名を持つ名前付き引数を繰り返し指定することはできません。 アクセス可能なプロパティは、属性を初期化するときにのみ設定できます。 プライベート プロパティを設定することはできません。

名前付きパラメーターと省略可能なパラメーターと引数

名前付き引数と省略可能な引数を誤って使用した場合、コンパイラは次のエラーを発行します。

  • CS1016: 名前付き属性引数が必要
  • CS1739: 最適なオーバーロードには、 という名前のパラメーターがありません
  • CS1740: 名前付き引数を複数回指定することはできません
  • CS1742: 配列アクセスには、名前付き引数指定子が含まれていない場合があります
  • CS1744: 名前付き引数は、位置指定引数が既に指定されているパラメーターを指定
  • CS1746: デリゲートに 'name' という名前のパラメーターがありません
  • CS7067: 属性コンストラクター パラメーター 省略可能ですが、既定のパラメーター値は指定されませんでした。
  • CS8324: 名前付き引数の指定は、動的呼び出しですべての固定引数が指定された後に指定する必要があります。
  • CS8905: 名前付き引数を使用して関数ポインターを呼び出すことはできません。

これらのエラーの次の原因を確認します。

  • 名前付き引数のパラメーター名が正しくありません。
  • 選択したオーバーロードには、名前付き引数と一致するパラメーターがありません。
  • パラメーター名は、複数の引数で繰り返されます。
  • 位置指定 (名前なし) 引数は、名前付き引数の後に表示されます。
  • 名前付き引数は、配列インデックス パラメーターには使用できません。

補間された文字列ハンドラー

挿入文字列ハンドラーの指定が誤っている場合、コンパイラは次のエラーを発行します:

  • CS8943: null 有効なパラメーター名ではありません。インスタンス メソッドの受信側にアクセスするには、パラメーター名として空の文字列を使用します。
  • CS8944: インスタンス メソッドではなく、レシーバーを挿入文字列ハンドラー引数にすることはできません。
  • CS8945: 有効なパラメーター名ではありません。
  • CS8948: InterpolatedStringHandlerArgumentAttribute 引数は、属性が使用されているパラメーターを参照できません。
  • CS8949: パラメーターに適用される InterpolatedStringHandlerArgumentAttribute の形式が正しくなっされておらず、解釈できません。インスタンスを手動で構築します。
  • CS8950: Parameter はパラメーターの補間文字列ハンドラー変換の引数ですが、対応する引数は補間文字列式の後に指定されます。
  • CS8951: Parameter は明示的に指定されていませんが、パラメーターの挿入文字列ハンドラー変換の引数として使用されます。

挿入文字列ハンドラーは、パターンベースのコンストラクトです。 パターンを正しくすることが重要です。 機能仕様のを参照するか、挿入文字列ハンドラーを構築 チュートリアルに従ってください。

呼び出し元のデバッグ情報

コンパイラは、System.Runtime.CompilerServices.CallerArgumentExpressionAttributeが正しく使用されていない場合に次のエラーを発行します。

  • CS8964: CallerArgumentExpressionAttribute は、既定値を持つパラメーターにのみ適用できます

さらに、コンパイラは、CallerArgumentExpressionAttributeの不適切な使用に関して次の警告を発行します。

  • CS8965: パラメーターに適用された CallerArgumentExpressionAttribute は自己参照であるため、効果はありません。
  • CS8966: 省略可能な引数を許可しないコンテキストで使用されるメンバーに適用されるため、CallerArgumentExpressionAttribute は無効になります

CallerArgumentExpression 属性で注釈が付けられたパラメーターには、既定値が必要です。