JetBrains Rider 2025.2 Help

代码检查:合同注解定义中的问题

此检查会验证 契约注解 的语法。

合同注解的语法

使用以下语法指定合同注解的输入输出依赖关系:

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

input 可以是:

  • null/非空 用于引用类型参数

  • true/false 用于布尔类型参数。

输出 可以是

  • null/非空/canbenull 用于引用类型的返回值

  • true/false 用于布尔类型的返回值

  • halt | 停止 | void | 无任何内容 (它们是可互换的)以指示函数不会正常返回。 也就是说,它会抛出异常或停止程序执行。

可选的布尔 forceFullStates 参数,默认为 false,允许您为可空性分析强制启用 悲观模式。 也就是说,如果方法的返回值未由合同条件定义,JetBrains Rider 将假定它可能为 null。

备注:

  • 如果只有一个参数,您可以省略 paramName (请参见上面的示例)

  • 如果没有参数,您可以同时省略 paramName输入

    [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 ⇒ output 等于 output ≤ input

    [ContractAnnotation("null <= surname:null")] public string GetName(string surname)
  • 您还可以为 'out' 参数指定预期值。 如果您想为同一输入条件同时指定返回值和 'out' 参数,请使用逗号:

    [ContractAnnotation("s:null => false,result:null")] public bool TryParse(string s, out object result)
最后修改日期: 2025年 9月 26日