2

使用 Resharper 的代码注释属性,我正在尝试为一个方法编写一个 ContractAnnotation 属性,如果输入为 null,该方法将始终返回 null,但如果输入不为 null,则返回null 或值就像是:

[ContractAnnotation("null => null; notnull => null||notnull")]

我会自己写这个:

[ContractAnnotation("null => null")]

除了根据ReSharper 7 中的 Contract Annotations之外,这将自动补充一些无效的内容:

null => null如果只有一个参数,则省略参数名称。基本上,null => null意味着如果参数有值null,方法返回值也是null。另请注意,此注释会自动补充notnull => notnull.

我如何编写ContractAnnotation属性以指示当输入为 时无法确定返回值是什么notnull

或者,我怎样才能阻止它自动补充我的null => null注释notnull => notnull


奖金问题:

我怎么能写出类似下面的东西:

[ContractAnnotation("null => true; notnull => true||false")]

或者在那种情况下,这是否足够,因为它不会自动补充逆?

[ContractAnnotation("null => true")]
4

1 回答 1

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-returning 函数可以返回true或者false是多余的,因为它不可能返回任何其他东西。

于 2015-01-23T14:43:54.507 回答