使用 Resharper 的代码注释属性,我尝试为一个方法编写一个 ContractAnnotation 属性,如果输入为 null,它将始终返回 null,但如果输入不为 null,则将返回 null 或值。像这样:
[ContractAnnotation("null => null; notnull => null||notnull")]
我只会自己写这个:
[ContractAnnotation("null => null")]
除了根据 ReSharper 7 中的合约注释,这将自动补充无效的内容:
null => null
在只有一个参数的情况下省略参数名称。基本上,null => null
意味着如果参数具有值null
,则方法返回值也是null
。另请注意,此注释会自动补充notnull => notnull
。
如何编写 ContractAnnotation
属性以指示在输入notnull
时无法确定返回值是什么?
或者,我如何阻止它自动用notnull => notnull
补充我的null => null
注释
奖金问题:
我怎么能写出类似以下内容的东西:
[ContractAnnotation("null => true; notnull => true||false")]
或者在这种情况下,这是否足够,因为它不会自动与反向补充?
[ContractAnnotation("null => true")]
canbenull
:
[ContractAnnotation("null => null; notnull => canbenull")]
完整的语法是:
FDT ::= FDTRow [;FDTRow]*
FDTRow ::= Input => Output | Output <= Input
Input ::= ParameterName: Value [, Input]*
Output ::= [ParameterName: Value]* {halt|stop|void|nothing|Value}
Value ::= true | false | null | notnull | canbenull
至于奖金问题,[ContractAnnotation("null => true")]
应该足够了。说 bool
-return 函数可以返回true
或false
是多余的,因为它不可能返回其他任何内容。