代码检查:合同注解定义中的问题
此检查会验证 契约注解 的语法。
契约注解的语法
使用以下语法为契约注解指定输入输出依赖关系:
[ContractAnnotation("[paramName:][input] =>
output [; [paramName:][input] => output]", [forceFullStates:true])]
输入 可以是:
null/notnull用于引用类型参数true/false用于布尔参数。
输出 可以是
null/notnull/canbenull用于引用类型的返回值true/false用于布尔类型的返回值终止|停止|void|nothing(可互换)表示函数不会正常返回。 也就是说,它会抛出异常或终止程序执行。
可选的布尔参数 forceFullStates ,默认为 false,允许您为可空性分析强制启用 悲观模式。 也就是说,如果方法返回值未由契约条件定义,ReSharper 将假定它可能为 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)您可以反转条件,即
输入 => 输出等于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月 27日