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 :

Comportement bizarre de constantes char


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut Comportement bizarre de constantes char
    Bonsoir à tous,

    Je me lance dans le C# et là je me retrouve face à un comportement un peu bizarre généré par le compilateur (je suis sous Visual Studio 2008). J'ai le code suivant (ce n'est évidemment qu'un extrait) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    namespace projetSocket
    {
     
        public partial class frmPrinc : Form
        {
            private struct socketMsgFromWindows
            {
                public char header;
                public socketMsgParamsWindows datas;
            }
     
            private const char BATCH_CONFIG = 'B';
            private const char FIELD_SEPARATOR = '?';
     
            .....
     
             private void button2_Click(object sender, EventArgs e)
            {
                MessageBox.Show(BATCH_CONFIG + FIELD_SEPARATOR);
            }
    Tel quel, j'ai l'erreur suivante :
    Error 2 Argument '1': cannot convert from 'int' to 'string' D:\Documents and Settings\Stephane\Mes documents\INSA\4IF\Socket\projetSocket\poste_distant\code\Windows\projetSocket\projetSocket\frmPrinc.cs 203 29 projetSocket

    Si je corrige comme suit ça compile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void button2_Click(object sender, EventArgs e)
            {
                MessageBox.Show(BATCH_CONFIG.ToString() + FIELD_SEPARATOR);
            }
    Bon ... qu'il me force à mettre ToString .... pourquoi pas ...... mais ce qui me choque surtout c'est que BATCH_CONFIG et FIELD_SEPARATOR ont la même définition et que pour l'un je dois préciser le ToString mais pas pour l'autre ... Bref je suis dans une incompréhension totale ....

    Moi je voudrais simplement afficher mon caractère B déclaré en const char ... (y a-t-il une autre solution que d'utiliser le ToString() ?)
    Et puis pourquoi pour pour BATCH_CONFIG je dois préciser le ToString() mais pas pour l'autre ?


    Merci de m'avoir lu et merci par avance pour votre aide


    [EDIT] : je viens de faire un autre test. En mettant MessageBox.Show(FIELD_SEPARATOR) => fonctionne pas

    Donc pourquoi dans MessageBox.Show(BATCH_CONFIG.ToString() + FIELD_SEPARATOR) fonctionne ?

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Je suppose que lorsque le compilateur vois un string + char il se rends compte qu'il faut qu'il convertisse les deux en string (doit y avoir un opérateur + implicite entre char et string).
    Par contre je suis de l'avis du compilo, un char ce n'est pas un string vu qu'à la base un string c'est un char[] donc soit tu remplaces 'B' par "B", soit tu utilises ToString() sur l'un où les deux.
    D'ailleurs, ce qui serait bizarre c'est que char + char = string ...

  3. #3
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    Bonsoir,
    Citation Envoyé par smyley Voir le message
    Je suppose que lorsque le compilateur vois un string + char il se rends compte qu'il faut qu'il convertisse les deux en string (doit y avoir un opérateur + implicite entre char et string).
    C'est pas faux ... je n'avais pas pensais à cette possibilitée
    Citation Envoyé par smyley Voir le message
    Par contre je suis de l'avis du compilo, un char ce n'est pas un string vu qu'à la base un string c'est un char[] donc soit tu remplaces 'B' par "B", soit tu utilises ToString() sur l'un où les deux.
    Effectivement ... mais je suis un peu obligé de rester avec un char par rapport à d'autres parties de mon programme ...
    Citation Envoyé par smyley Voir le message
    D'ailleurs, ce qui serait bizarre c'est que char + char = string ...
    Egalement ... vu comme ça y'avait aucune raison ...


    Merci de m'avoir répondu et éclairci

    Bonne soirée

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par smyley Voir le message
    Je suppose que lorsque le compilateur vois un string + char il se rends compte qu'il faut qu'il convertisse les deux en string (doit y avoir un opérateur + implicite entre char et string).
    C'est pas limité aux char, d'ailleurs ; c'est valable pour tout objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    object o = new JeSaisPasQuoi();
    string s = "machintruc" + o;
    // équivaut à
    string s = "machinTruc" + o.ToString();

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

Discussions similaires

  1. Comportement bizarre de mes FPS
    Par Ekinoks dans le forum OpenGL
    Réponses: 7
    Dernier message: 22/08/2005, 15h14
  2. xsl:test .... avec comportement bizarre
    Par Blue LC dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h56
  3. [ACESS][MEMO][ISNULL]Comportement bizarre
    Par seb.49 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 10h44
  4. [HttpClient] comportement bizarre, saute des catch()...
    Par iubito dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 04/02/2004, 15h25
  5. [Sybase] Comportement bizarre d'une table
    Par sdozias dans le forum Sybase
    Réponses: 4
    Dernier message: 03/02/2004, 10h39

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