6

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 == nullreplace with != null.

4

1 に答える 1

0

本当に必須でない場合は、この投稿によると、このルールをあきらめることができます:

「コンパイラは null 比較を HasValue の呼び出しに置き換えます。したがって、実際の違いはありません。読みやすく、自分や同僚にとって意味のある方を実行してください。」

于 2012-08-30T08:54:23.490 に答える