6

我在 resharper 中有一条规则来查找对 Nullable.HasValue 的调用

T? foo; 
//...

if(foo.HasValue)
{}

//And it offers to replace with a comparison directly with null:

if(foo != null)
{}

这很好用,但是当它遇到一个 negate.HasValue时,结果有点奇怪。

if(!foo.HasValue) {}

//is replaced with
if(!(foo != null)) {}

然后 resharper 想让我把语句简化为if(foo == null)

//ideally it would automatically get to this without the extra step:
if(foo == null) {}

规则定义为:

type:     System.ValueType or derived
nullable: expression of type System.Nullable<$type$>

search pattern:
$nullable$.HasValue

replace pattern:
$nullable$ != null

(“替换后的格式”和“缩短引用”都被选中)

有没有办法可以编写此规则,以便 ReSharper 智能地处理它?我尝试为 制定第二条规则!$nullable$.HasValue,但这会导致两个规则匹配,这使得工具提示建议看起来令人困惑:replace with == nullreplace with != null.

4

1 回答 1

0

如果不是真的强制性的,你可以放弃这条规则,因为根据这篇文章

“编译器将空比较替换为对 HasValue 的调用,因此没有真正的区别。只要对您和您的同事更具可读性/更有意义即可。”

于 2012-08-30T08:54:23.490 回答