J'utiliserai souvent ce code pour comparer une chaîne:
if(!string.IsNullOrEmpty(str1) && str1.Equals(str2)){
//they are equal, do my thing
}
Ceci gère le cas nul en premier, etc.
Existe-t-il une méthode plus simple de comparaison de chaînes, éventuellement avec un seul appel à une méthode permettant de gérer les valeurs NULL possibles? Je veux simplement savoir que les chaînes ne sont pas égales si la valeur de test est null.
(J'ai déjà dejavu comme je l'ai peut-être déjà demandé, je m'excuse si c'est le cas)
Mise à jour: Dans mon cas, str2 est une chaîne connue à comparer, je n'ai donc pas besoin de la vérifier pour null. str1 est la chaîne "inconnue" qui peut être nulle, donc je veux dire "str1 n'est pas égal à str2" dans les cas où str1 est null ...
Contrairement à Java, les chaînes C # remplacent l'opérateur ==
:
if (str1 == str2)
Si vous souhaitez une comparaison insensible à la casse:
if (String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)
Si vous voulez que pas veuille traiter deux chaînes null
comme égales, votre code est optimal.
Si, par contre, vous voulez traiter les valeurs null
comme égales, vous pouvez utiliser
object.Equals(str1, str2)
pour une approche plus "symétrique" qui gère également les valeurs null
.
Je sais que cela date de quelques années et je pense que la solution de dasblinkenlight est fonctionnellement parfaite pour ce que vous avez demandé . Cependant, je préfère ce code pour des raisons de lisibilité:
String.Equals(str1, str2)
Il n'y a pas de moyen intégré pour faire cela, mais vous pouvez créer une méthode d'extension pour encapsuler cela.
public static StringExtensions
{
public static Boolean IsNotNullAndEquals(this string str1, string str2)
{
return !string.IsNullOrEmpty(str1) && str1.Equals(str2)
}
}
puis utilisez-le comme ceci:
str1.IsNotNullAndEquals(str2);
Nommer va être votre chose la plus difficile ici IMO ... puisque vous devez indiquer que vous ne faites que vérifier null str1
. Lorsqu'elle est utilisée comme méthode d'extension, elle lit assez bien, mais si elle est utilisée comme une statique classique, elle ne le transmet pas aussi bien.
Vous pouvez utiliser ce code
object.Equals(str1, str2)
Cela va le faire:
string.IsNullOrWhiteSpace(str1) ? string.IsNullOrWhiteSpace(str2) : str1.Equals(str2, StringComparison.OrdinalIgnoreCase);