tengo una regla en ReSharper para encontrar llamadas a Nullable.HasValuereemplazo patrón personalizado ReSharper con la expresión de la igualdad negativo
T? foo;
//...
if(foo.HasValue)
{}
//And it offers to replace with a comparison directly with null:
if(foo != null)
{}
Esto funciona muy bien, pero cuando se encuentra con un negada .HasValue
, el resultado es un poco extraño.
if(!foo.HasValue) {}
//is replaced with
if(!(foo != null)) {}
Entonces ReSharper quiere que simplifican la declaración a solo if(foo == null)
//ideally it would automatically get to this without the extra step:
if(foo == null) {}
La regla se define como:
type: System.ValueType or derived
nullable: expression of type System.Nullable<$type$>
search pattern:
$nullable$.HasValue
replace pattern:
$nullable$ != null
('Formato después de reemplazo' y 'Acortar referencias' son ambos marcados)
¿Hay alguna forma de que pueda escribir esta regla para que ReSharper maneje inteligentemente? Intenté hacer una segunda regla para !$nullable$.HasValue
, pero eso hace que ambas reglas coincidan, lo que hace que las sugerencias de sugerencias parezcan confusas: replace with == null
y replace with != null
.
No sé la solución. Solo una idea y supongo que ya pensaste en ello: elimina el patrón para '! Foo.HasValue' y agrega solo patrones para' foo.HasValue' y '! (Foo! = Null)'. Por lo tanto, solo hay una regla a la vez, pero desafortunadamente necesita utilizar ** dos ** patrones consecutivos para el código como '! Foo.HasValue'. – thersch
Los patrones de búsqueda contienen solo reglas positivas. Ya me perdí varias veces la posibilidad de definir reglas negativas para excluir un código especial para un patrón. – thersch
Los patrones personalizados Resharper son bastante difíciles de resolver, ojalá hubiera un motor de patrones personalizados de prueba con el que pudiera ejecutar algunas expresiones conocidas y malas contra – Maslow