ReSharper 2026.3 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 (交換可能)は、関数が正常に戻らないことを示します。 つまり、例外をスローするか、プログラムの実行を停止します。

The optional boolean forceFullStates parameter, which is false by default, allows you to force the pessimistic mode for the nullability analysis. That is, if the method return value is not defined by the contract condition, ReSharper assumes that it might be null.

備考:

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

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

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

    or if the function has the same output independently of the input:

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

    [ContractAnnotation("input:null => null; input:notnull=>notnull")] public object Transform(object input, bool flag)
  • 条件を逆にすることもできます。つまり、 input => output は output <= 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 年 11 月 6 日