如何使用Resharper CodeAnnotation属性指示结果歧义?

时间:2015-01-23 14:39:45

标签: c# resharper code-contracts resharper-8.0 resharper-7.1

使用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")]

1 个答案:

答案 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 - 返回函数可以返回truefalse是多余的,因为它可能无法返回任何其他内容。