c# - check - Igualdad de cuerdas con manejo nulo.
string null c# (6)
A diferencia de Java, las cadenas C # anulan el operador ==
:
if (str1 == str2)
Si quieres una comparación insensible a mayúsculas y minúsculas:
if (String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)
A menudo usaré este código para comparar una cadena:
if(!string.IsNullOrEmpty(str1) && str1.Equals(str2)){
//they are equal, do my thing
}
Esto maneja el caso nulo primero etc.
¿Existe una forma más clara de hacer una comparación de cadenas, tal vez con una sola llamada de método que maneje posibles valores nulos? Simplemente quiero saber que las cadenas no son iguales si el valor de prueba es nulo.
(Tengo un dejavu que puedo haber preguntado esto antes, me disculpo si es así)
Actualización: en mi caso, el str2 es una buena cadena conocida con la que se puede comparar, por lo que no necesito verificar si está nulo. str1 es la cadena "desconocida" que puede ser nula, por lo que quiero decir "str1 no es igual a str2" en los casos en que str1 es nulo ...
Esto lo hará:
string.IsNullOrWhiteSpace(str1) ? string.IsNullOrWhiteSpace(str2) : str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
No hay una forma integrada de hacer esto, pero podría crear un método de extensión para encapsular esto.
public static StringExtensions
{
public static Boolean IsNotNullAndEquals(this string str1, string str2)
{
return !string.IsNullOrEmpty(str1) && str1.Equals(str2)
}
}
entonces úsalo así:
str1.IsNotNullAndEquals(str2);
La nomenclatura va a ser lo más difícil aquí IMO ... ya que necesita transmitir que solo está comprobando nulo str1
. Cuando se usa como un método de extensión, se lee bastante bien, pero si se usa como una estática regular, entonces tampoco transmite eso.
Puedes usar este código
object.Equals(str1, str2)
Sé que esto tiene algunos años y creo que la solución de dasblinkenlight es funcionalmente perfecta para lo que pidió. Sin embargo, prefiero este código por razones de legibilidad:
String.Equals(str1, str2)
Si no desea tratar dos cadenas null
como iguales, su código es óptimo.
Si, por otro lado, quiere tratar null
valores null
como iguales entre sí, puede usar
object.Equals(str1, str2)
para un enfoque más "simétrico" que también maneja valores null
.