son - posible comparacion de referencias no intencionada c#
¿Cómo comparar los tipos que aceptan nulos? (6)
C # admite operadores "levantados", por lo que si el tipo ( bool?
En este caso) se conoce en compilación, debería poder usar:
return x != y;
Si necesita genéricos, EqualityComparer<T>.Default
es su amigo:
return !EqualityComparer<T>.Default.Equals(x,y);
Sin embargo, tenga en cuenta que ambos enfoques utilizan el enfoque " null == null
" (en contraste con ANSI SQL). Si necesita " null != null
", tendrá que probarlo por separado:
return x == null || x != y;
Tengo algunos lugares donde necesito comparar 2 valores (anulables), para ver si son iguales.
Creo que debería haber algo en el marco para apoyar esto, pero no puedo encontrar nada, así que en su lugar tengo lo siguiente:
public static bool IsDifferentTo(this bool? x, bool? y)
{
return (x.HasValue != y.HasValue) ? true : x.HasValue && x.Value != y.Value;
}
Entonces, dentro del código tengo if (x.IsDifferentTo(y)) ...
Luego tengo métodos similares para intros nullables, dobles con nulos, etc.
¿No hay una manera más fácil de ver si dos tipos que aceptan nulos son los mismos?
Actualizar:
Resulta que la razón por la que este método existió fue porque el código se ha convertido de VB.Net, donde Nothing = Nothing devuelve false (compare con C # donde null == null devuelve true). El código VB.Net debería haber usado .Equals...
lugar.
Puede usar el método static Equals en System.Object:
var equal = object.Equals(objA, objB);
Simplemente use ==
, o .Equals()
.
Utilice Comparar:
if (x.Equals(y))