Nullable.HasValue への呼び出しを見つけるための resharper のルールがあります。
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)) {}
次に、リシャーパーは、ステートメントを単純化して、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 がインテリジェントに処理できるように、このルールを作成する方法はありますか? の 2 つ目のルールを作成しようとしました!$nullable$.HasValue
が、両方のルールが一致するため、ツールヒントの提案が混乱して見えます:replace with == null
とreplace with != null
.