我在reshaper中有一条规则可以找到对Nullable.HasValue的调用

T? foo;
//...

if(foo.HasValue)
{}

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

if(foo != null)
{}

这很好用,但是当遇到否定的.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

最佳答案

如果不是真正强制性的,则可以放弃此规则,因为根据此post:

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

10-08 20:00