У меня есть правило в 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
.