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

VB.NET Discussion :

Entre CStr et ToString, mon coeur balance


Sujet :

VB.NET

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut Entre CStr et ToString, mon coeur balance
    Hello les gens.

    Une question un peu plus technique je pense.

    Je me demandais simplement quelle(s) différence(s) il y avait entre faire et ?

    Y a-t-il une des deux méthodes qui soit préférable à l'autre ?

    Griftou.
    Kropernic

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Il est possible de passer un paramètre (sous un FormatProvider) qui va modifier le comportement du .ToString()

    Example:

    Si tu transforme une date en string avec Cstr(madate), tu vas avoir comme valeur de retour une représentation textuelle de la date selon le format date courte du système.

    Si tu utilises madate.ToString(Unformat), tu vas contrôler le format de la représentation textuelle (format long, seulement mois année, etc.).


    Après fondamentalement.

    Le toString est une fonction qui est définie de base dans chaque objet et que tu peux redéfinire pour changer le comportement.

    Le Cstr() est une fonction qui doit être réecrite pour chaque type d'objet qui peut être mis en paramètre.

    Mais ça ne m'étonnerait pas qu'il existe une définition de Cstr(Object) qui appelle la fonction .toString de Object (Si ce n'est pas le cas l'utilisation de cette fonction sur un Objet home made provoquerai alors une exception...)

    Moi je te conseille plutôt l'utilisation de ToString car tu peux contrôler plus facilement ce qui est retourné.

  3. #3
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Cstring est une fonction importée de VB6.0
    ToString est une methode hérité de la classe Object.

    Le reste a été dit plus haut, je vous conseille donc d'utiliser ToString

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  4. #4
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    Citation Envoyé par WOLO Laurent Voir le message
    je vous conseille donc d'utiliser ToString

    De plus, je pense que ca doit eviter des instructions, donc du code, par rapport au ConvertString (pas verifie en asm, mais ca me paraitrait logique)
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Conceptuellement, c'est pas tout à fait la même chose... CStr effectue une conversion, alors que ToString renvoie une représentation de l'objet sous forme de chaine. Mais bon, en pratique ça revient presque toujours au même.

    Il y a quand même une différence de taille : ToString est une méthode d'instance, donc si l'objet est null (Nothing), ça plante avec une NullReferenceException, alors que CStr va renvoyer null.

    En fait il me semble que l'équivalent de CStr en "pur .NET" (par opposition à une fonction héritée de VB6), c'est Convert.ToString

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 667
    Points : 1 166
    Points
    1 166
    Par défaut
    Bonsoir,
    100/100 d'accord avec TomLev, et Convert.ToString est aussi en C#, l'équivalent de CStr.
    Il propose aussi, sauf erreur la possibilité de formatage.
    Ici un exemple différenciant toString et CStr plus le test avec Convert.ToString :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            Dim arrChars(10) As Char
            Dim strString As String
            strString = "ABCDEFGHIK"
            arrChars = strString.ToCharArray
            strString = arrChars.ToString
            MessageBox.Show(strString)
     
            strString = CStr(arrChars)
            MessageBox.Show(strString)
     
            strString = Convert.ToString(arrChars)
            MessageBox.Show(strString)

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Vous avez maintenant tous les éléments pour faire votre choix.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Bonsoir,

    Juste une précision supplémentaire, qui ne remet pas en cause ce qui a été dit précédemment.

    CStr correspond à un appel d'une des surcharges de Microsoft.VisualBasic.CompilerServices.Conversions.ToString
    (il suffit de l'écrire dans son code et d'utiliser reflector pour voir où ça mène)

    Dans les différentes surcharges, à part quelques-unes toutes ont en gros le même fonctionnement, appeler param.ToString(Nothing, Nothing)
    Les seules qui diffèrent un peu sont :
    • Boolean (test de la valeur et renvoie de Boolean.TrueString/FalseString)
    • DateTime qui teste avant le type de "date" (uniquement Time etc.) pour renvoyer param.ToString(le format qui va bien, Nothing)
    • Object qui en gros est un switch (Select Case) pour dispatcher à la bonne surcharge si applicable
    • Decimal, Double et Single qui possèdent aussi une version avec NumberFormatInfo et utilisent le format "G" (sauf Single)


    Bref pour résumer, ne font que rajouter une étape, avant un appel à un "ToString .Net".

    Cordialement !
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  9. #9
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Nous pouvons donc conclure qu'il faut utiliser la méthode ToString.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  10. #10
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Citation Envoyé par WOLO Laurent Voir le message
    Nous pouvons donc conclure qu'il faut utiliser la méthode ToString.
    Fichtre ! Moi j'aurais conclu qu'il fallait utiliser CStr (ou Convert.ToString vu qu'apparemment, c'est la même chose) car ça évite de planter sur une instance nulle.

    Où est-ce que je me serais planté dans ma réflexion ?
    Kropernic

  11. #11
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Ca ne t'empêche pas d'ajouter toi même un traitement pour les instances nulles !

  12. #12
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par griftou Voir le message
    Fichtre ! Moi j'aurais conclu qu'il fallait utiliser CStr (ou Convert.ToString vu qu'apparemment, c'est la même chose) car ça évite de planter sur une instance nulle.

    Où est-ce que je me serais planté dans ma réflexion ?
    Tout dépendra de ce que tu veux.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  13. #13
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Je pense vouloir la même chose que tout le monde, c'est-à-dire un code le plus simple et lisible possible tout en étant parfaitement fonctionnel.
    Kropernic

Discussions similaires

  1. Réponses: 15
    Dernier message: 20/02/2015, 13h46
  2. Réponses: 4
    Dernier message: 22/06/2012, 15h19
  3. Entre SB64 et SB128 mon coeur balance
    Par ludosoft dans le forum Composants
    Réponses: 3
    Dernier message: 24/08/2007, 08h40
  4. Entre L'api Win32 et SDL mon coeur balance
    Par mechouille dans le forum API graphiques
    Réponses: 16
    Dernier message: 13/12/2006, 16h01
  5. Bug entre le bootloader et mon kernel ?
    Par hudson dans le forum Programmation d'OS
    Réponses: 13
    Dernier message: 21/06/2005, 13h40

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