web-dev-qa-db-fra.com

Egalité de chaîne avec traitement null

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 ...

21
Brady Moritz

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)
32
SLaks

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.

13
dasblinkenlight

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)
8
dotsven

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.

3
Justin Pihony

Vous pouvez utiliser ce code

object.Equals(str1, str2)
2
user1968030

Cela va le faire:

string.IsNullOrWhiteSpace(str1) ? string.IsNullOrWhiteSpace(str2) : str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
0
Emad Jazer