使用Resharper的代码注释属性,我正在尝试为一个方法编写一个ContractAnnotation属性,如果输入为null,它将始终返回null,但是如果返回,则返回 null输入不为空。类似的东西:
[ContractAnnotation("null => null; notnull => null||notnull")]
我只想自己写一下:
[ContractAnnotation("null => null")]
除了根据Contract Annotations in ReSharper 7,这将自动补充无效的内容:
如果只有一个参数,
null => null
会省略参数名称。基本上,null => null
表示如果参数的值为null
,则方法返回值也为null
。另请注意,此注释会自动补充notnull => notnull
。
我如何编写ContractAnnotation
属性以表明当输入为notnull
时无法确定返回值是什么?
或者,我如何停止使用null => null
notnull => notnull
注释?
加分问题:
我怎么能写下面的内容:
[ContractAnnotation("null => true; notnull => true||false")]
或者在这种情况下,这是否足够,因为它不会自动补充反向?
[ContractAnnotation("null => true")]
答案 0 :(得分:2)
您可以使用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
- 返回函数可以返回true
或false
是多余的,因为它可能无法返回任何其他内容。