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

Windows Forms Discussion :

[C#] Cast et Types again


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Par défaut [C#] Cast et Types again
    bjr,

    J'aimerai simplifier cette fonction:
    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
     
    private void BuildDate(object date)
    {
       switch(date.GetType().ToString())
       {
          case "System.String":
    	string _temp = date.ToString();
    	SetMembersFrom(_temp);
    	break;
     
          case "System.DateTime" :
    	DateTime _temp2 = (DateTime)date;
    	SetMembersFrom(_temp2);
    	break;
       }
    }
    Mes méthodes SetMembersFrom() sont surchargés (un avec DateTime et un avec string comme argument)
    et j'appelle BuildDate comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BuildDate(DateTime.Now);
    BuildDate("2005/11/12 00:00:00");
    Comment utiliser la reflexion pour caster dans le bon type ?
    du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void FonctionTest(object date)
    {
       Type dateType = date.GetType();
        SetMembersFrom((dateType)date);
    }
    Merci

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Excuses mais je comprends pas trop pourquoi tu as cette méthode BuildDate intermediaire qui reçoit un object en paramètre
    D'où provient ce date pour qu'il soit un object et non directement un DateTime ou un String :

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Par défaut
    C'est parce que je ne sais pas si "object date" que l'on fournit à BuildDate() est de type String ou DateTime ou d'un autre type.

    En fait c'est pour savoir comment je peux caster un type object en un autre type que je connais pas (sans instancier un nouvel objet).
    Puis je passe ce dernier à la fonction appropriée avec le bon prototype.

  4. #4
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Et as-tu essayer en effet directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     private void BuildDate(object date) 
    { 
       SetMembersFrom((date.GetType()) date);  
    }

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Par défaut
    hélas ca ne marche pas.

    Il attend une ")".

  6. #6
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par BoeufBrocoli
    hélas ca ne marche pas.

    Il attend une ")".
    oui mais encore

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Par défaut
    lol non ca ne marche pas.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par BoeufBrocoli
    C'est parce que je ne sais pas si "object date" que l'on fournit à BuildDate() est de type String ou DateTime ou d'un autre type.
    C'est le boulot du code appelant ça.
    Au pire, tu fais un BuildDate qui reçoit un string, un autre qui reçoit un DateTime, et l'appelant se débrouille pour appeler le bon.

    Citation Envoyé par BoeufBrocoli
    En fait c'est pour savoir comment je peux caster un type object en un autre type que je connais pas (sans instancier un nouvel objet).
    Tu ne peux pas. Ce que tu fais actuellement est le 'mieux'. Enfin t'as juste pas besoin des variables temporaires. Tu castes directement dans l'appel de SetMembersFrom, ça grapille toujours deux lignes comme ça.

    Mais bon, deux versions de BuildDate, c'est bien mieux. Et encore, à moins qu'il manque du code dans ce que tu as montré, tu peux virer BuildDate et forcer le code appelant à utiliser directement SetMembersFrom. Là BuildDate sert juste à dispatcher, et c'est pas un genre de dispatching à conserver...


    Citation Envoyé par neguib
    Et as-tu essayer en effet directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     private void BuildDate(object date) 
    { 
       SetMembersFrom((date.GetType()) date);  
    }
    Euh... Dis, tu as une version de C# croisée vaudou là ? :)

  9. #9
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par Maniak
    Citation Envoyé par neguib
    Et as-tu essayer en effet directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     private void BuildDate(object date) 
    { 
       SetMembersFrom((date.GetType()) date);  
    }
    Euh... Dis, tu as une version de C# croisée vaudou là ?
    et non je suis vbciste
    En fait tu as très judicieusement exprimé en première partie tout ce que je pensais et ne savais correctement lui formulé
    Citation Envoyé par neguib
    Excuses mais je comprends pas trop pourquoi tu as cette méthode BuildDate intermediaire qui reçoit un object en paramètre
    D'où provient ce date pour qu'il soit un object et non directement un DateTime ou un String

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Par défaut
    Merci pour les reponses que vous m'avez apporté !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/01/2012, 20h11
  2. Problème de cast du Type de données Money
    Par verbal34 dans le forum Développement
    Réponses: 1
    Dernier message: 04/08/2008, 11h06
  3. Problème cast de type 'ASP.masterpage_master'
    Par vinzestia dans le forum ASP.NET
    Réponses: 1
    Dernier message: 09/01/2008, 14h58
  4. Réponses: 2
    Dernier message: 07/03/2007, 14h27
  5. [VB.Net] cast du type 'DataRowview' en type 'Date' non valide
    Par badnane2 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/06/2006, 15h50

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