ReSharper 2026.1 Help

コードインスペクション: 契約アノテーション定義の問題

このインスペクションは 契約アノテーション の構文を検証します。

契約アノテーションの構文

契約アノテーションの入出力関係の依存関係を指定するには、次の構文を使用します。

[ContractAnnotation("[paramName:][input] => output [; [paramName:][input] => output]", [forceFullStates:true])]

input は次のいずれかです。

  • 参照型パラメーターの null/notnull

  • ブールパラメーターの true/false

output は次のいずれかになります。

  • 参照型の戻り値の null/notnull/canbenull

  • ブール型の戻り値の true/false

  • halt | stop | void | nothing (交換可能)は、関数が正常に戻らないことを示します。 つまり、例外をスローするか、プログラムの実行を停止します。

オプションのブール forceFullStates パラメーター(デフォルトでは false)を使用すると、nullability 分析の 悲観的モードを強制できます。 つまり、メソッドの戻り値が契約条件で定義されていない場合、ReSharper は null である可能性があると想定します。

備考:

  • パラメーターが 1 つだけの場合、 paramName を省略できます(上記の例を参照)

  • パラメーターがない場合は、 paramNameinput の両方を省略できます:

    [ContractAnnotation("=> halt")] public void TerminationMethod()

    または、入力に関係なく関数が同じ出力を持つ場合:

    [ContractAnnotation("=> halt")] public void TerminationMethod(object data, bool flag)
  • 同じパラメーターに対して複数の条件を追加できます。

    [ContractAnnotation("input:null => null; input:notnull=>notnull")] public object Transform(object input, bool flag)
  • 条件を逆にすることもできます。つまり、 input => outputoutput <= input と等しいです:

    [ContractAnnotation("null <= surname:null")] public string GetName(string surname)
  • 'out' パラメーターの期待値を指定することもできます。 同じ入力条件に対して戻り値と出力パラメーターの両方を指定する場合は、コンマを使用します。

    [ContractAnnotation("s:null => false,result:null")] public bool TryParse(string s, out object result)
2026 年 6 月 12 日