IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Différence entre String.Empty .Equals("") etc


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Points : 66
    Points
    66
    Par défaut Différence entre String.Empty .Equals("") etc
    Bonjour,
    Existe t'il une différence entre les tests suivants ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      if (Text == String.Empty)
     
      if (Text == "") 
     
      if (Text.Equals(""))
     
    Text est un String:   String Text;

    Pour moi, les 3 codes réagissent de façon identique. Quelle est la meilleur écriture, et pourquoi ?

    Thierry

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Salut,

    Dans l'utilisation cela ne fait aucunes différences, après au niveau du code IL généré je ne sais pas si cela fait une différence.

    Ensuite en terme d'utilisation, ce que je fais génréralement c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string type = "blah";
    if(string.IsNullOrEmpty(type))
    {
    Qui teste à la fois le null et le contenu vide, du coup parmis tes trois syntaxe je prendrai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Text == String.Empty)
    L'avantage par rapport aux autres: il n'y a pas de string déclarée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Points : 66
    Points
    66
    Par défaut
    Merci mermich.

    voici une petite fonction qui permet de tester si un champ est saisie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            public  static Boolean isNotNull(String Text)
            {
                Boolean isNotNull = false;
                try
                {
                    if (String.IsNullOrEmpty(Text.Trim()))
                        throw new Exception();
                    isNotNull = true;
                }
                catch(Exception)
                {}
                return isNotNull;
            }

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par mastronic Voir le message
    Merci mermich.

    voici une petite fonction qui permet de tester si un champ est saisie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            public  static Boolean isNotNull(String Text)
            {
                Boolean isNotNull = false;
                try
                {
                    if (String.IsNullOrEmpty(Text.Trim()))
                        throw new Exception();
                    isNotNull = true;
                }
                catch(Exception)
                {}
                return isNotNull;
            }
    Oula! Très mauvais! Il ne faut pas jeter des exceptions comme ca! Ca n'est pas fait pour ca!
    Si tu veux faire ce que tu as fait de manière propre voici ce qu'il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            public static Boolean IsNotNull(String text)
            {
                 return !String.IsNullOrEmpty(text.Trim()))      
            }

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Points : 142
    Points
    142
    Par défaut
    N'y aurait-il pas un problème avec le nom de la fonction ?

    Ne doit-on pas la nommer autrement afin que son nom reflète réellement l'intention du programmeur ?

    Lorsque je lis la signature de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static Boolean IsNotNull(String text)
    Je m'attends à une seule responsabilité.

    Alors que lorsque je lis l'implémentation de celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return !String.IsNullOrEmpty(text.Trim()))
    Il y en a deux : "IsNull" or "IsEmpty".

    N'y aurait-il pas de la désinformation ?

    EDIT :

    Réponse à mon interrogation.

    Citation Envoyé par mastronic Voir le message
    voici une petite fonction qui permet de tester si un champ est saisie
    Le nom de la fonction ne reflète donc pas l'intention réelle.

  6. #6
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,

    avec le .NET Framework 4 tu as string.IsNullOrWhiteSpace (pareil que IsNullOrEmpty, sauf qu'en plus ça teste si la chaîne ne contient que des espaces blancs- donc plus besoin du 'Trim()' dans l'exemple).
    Sinon pour la différence entre
    et
    la première des deux est un champ static readonly, donc réévalué à l'exécution, et la seconde est une constante. Pour les puristes, il vaut mieux utiliser string.Empty, par exemple dans l'optique (totalement improbable) où la constante 'chaîne vide' s'écrive différemment dans le futur. Mais sinon c"est pareil.
    Un dernier point : ne jamais oublier que le type 'string' n'est pas un type valeur, donc il peut avoir comme valeur 'null'. Et une chaîne à laquelle on affecte 'null' n'est pas équivalente à string.Empty...

    D'ailleurs, dans l'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static Boolean IsNotNull(String text)
            {
                 return !String.IsNullOrEmpty(text.Trim()))      
            }
    ça ne sert à rien de tester si la chaîne est null avec IsNullOrEmpty, puisque si 'text' était égal à 'null' ce code lèverait une ArgumentNullException, et s'il ne l'est pas de toute manière la fonction Trim ne renvoie jamais null.

  7. #7
    Invité
    Invité(e)
    Par défaut
    je sais que le thread est résolu, faut pas oublier qu'il y aussi la méthode String.IsNullOrWhitespace qui permet de vérifier si la chaîne est vide ou contient que des espaces. ben c'est dispo avec la version 4.0 du framework.

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par MetalGeek Voir le message
    Salut,

    avec le .NET Framework 4 tu as string.IsNullOrWhiteSpace (pareil que IsNullOrEmpty, sauf qu'en plus ça teste si la chaîne ne contient que des espaces blancs- donc plus besoin du 'Trim()' dans l'exemple).
    Sinon pour la différence entre
    et
    la première des deux est un champ static readonly, donc réévalué à l'exécution, et la seconde est une constante. Pour les puristes, il vaut mieux utiliser string.Empty, par exemple dans l'optique (totalement improbable) où la constante 'chaîne vide' s'écrive différemment dans le futur. Mais sinon c"est pareil.
    Un dernier point : ne jamais oublier que le type 'string' n'est pas un type valeur, donc il peut avoir comme valeur 'null'. Et une chaîne à laquelle on affecte 'null' n'est pas équivalente à string.Empty...

    D'ailleurs, dans l'exemple


    ça ne sert à rien de tester si la chaîne est null avec IsNullOrEmpty, puisque si 'text' était égal à 'null' ce code lèverait une ArgumentNullException, et s'il ne l'est pas de toute manière la fonction Trim ne renvoie jamais null.
    Je n'ai fait qu'enlever l'abomination de l'Exception!
    Sinon effectivement le trim empeche la valeur d'être null (d'ou peut être le try-catch)

  9. #9
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 38
    Points : 50
    Points
    50
    Par défaut
    la plus clean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public static Boolean IsNullOrEmpty(this string text)
            {
                return String.IsNullOrEmpty(text) && String.IsNullOrEmpty(text.Trim());
            }
    comme methode d'extension

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Difference entre string.Empty et ""
    Par lasrevinu dans le forum C#
    Réponses: 9
    Dernier message: 23/04/2010, 06h13
  2. Réponses: 7
    Dernier message: 10/07/2006, 13h25
  3. Différence entre String et Int
    Par Alchimist dans le forum Langage
    Réponses: 6
    Dernier message: 05/04/2006, 11h00
  4. différence entre <string.h> et <string>
    Par mister3957 dans le forum C++
    Réponses: 3
    Dernier message: 20/03/2006, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo