замена пользовательского шаблона resharper отрицательным выражением равенства

У меня есть правило в resharper для поиска вызовов 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 == null. и replace with != null.

6
задан dan 25 July 2012 в 21:05
поделиться