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 :

cast d'une variable en Type passé en paramètre [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 142
    Points : 74
    Points
    74
    Par défaut cast d'une variable en Type passé en paramètre
    Bonjour,

    J'aimerais caster une variable dans une fonction avec le paramètre Type récupèré.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    mafonction(string _a, Type _t)
    {
     
    (_t) VarMonType = (_t)  autreVariable;
     
    }
     
     
    mafonction("toto", TextBox)

    en espèrant m'être fait comprendre

    Merci.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Salut,

    je croyais avoir compris ta question jusqu'à que je vois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mafonction("toto", TextBox)
    En lisant juste ceci :
    J'aimerais caster une variable dans une fonction avec le paramètre Type récupèré.
    J'aurais dit :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    Convert.ChangeType(Object value, Type type)

    Cf : Ici

    Peux-tu nous dire quel utilisation souhaites tu faire de cela, et détaillé un peu plus ?

    Cordialement,
    NeoKript

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    On peut pas. Par contre, je connais pas le besoin qui est à l'origine de cette question, mais connais tu les generics ?

    De toutes façons : dans ta méthode mafonction, comme tu connais pas statiquement le type de l'objet en paramètre, tu ne saurais rien faire de l'objet casté en TextBox.

    Peux-tu détailler ton besoin ? pour qu'on puisse t'expliquer comment le résoudre dans le respect de la philosophie de C# ?
    ಠ_ಠ

  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 : 37
    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 080
    Points
    8 080
    Par défaut
    Ca n'est pas possible!
    En effet, le type que tu passes ne sera connu qu'à l'execution or le compilateur en a besoin à la compilation.
    Tu peux passer par les génériques:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mafonction<T>(string _a)
    { 
        T VarMonType = (T) autreVariable; 
    }
    qui s'utilise comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mafonction<String>("bla");
    mais ne peut pas s'utiliser comme ca (pour la même raison qu'au dessus):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mafonction<mavariable.GetType()>("bla");

  5. #5
    Membre actif Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Points : 293
    Points
    293
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mafonction("toto", TextBox)
    D'ailleurs, si je ne m'abuse, cette syntaxe est incorrecte ... non ?

    Une erreur style "... utilisation comme une variable ..." devrait être levée à la compilation ... non ? Oo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mafonction("toto", typeof(TextBox))
    EDIT : le message est «'System.Windows.Forms.TextBox' is a 'type' but is used like a 'variable'» ^^

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 142
    Points : 74
    Points
    74
    Par défaut
    Alors j'explique mon cas, je travail en WPF j'ai un datagrid, je recherche des controles dans se datagrid. les controles peuvent etre différent Textbox, combobox...

    J'ai trouver un code me permettant de trouver le premier control d'un certain type :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
       private T FindFirstElementInVisualTree<T>(DependencyObject parentElement, string nom, Type ctrl) where T : DependencyObject
            {
                var count = VisualTreeHelper.GetChildrenCount(parentElement);
                if (count == 0)     
                    return null;
                for (int i = 0; i < count; i++)
                {
                    var child = VisualTreeHelper.GetChild(parentElement, i);
                
                            if (child != null && child is T )
                            {
                                if ( child.DependencyObjectType.SystemType.FullName.Equals (ctrl.FullName) )
                                {
                                    TextBox txt = (TextBox)child;
    
                                    if ( txt.Text == "txtChargeur")
                                    return (T)child;
                                }
                            }
                            else
                            {
                                var result = FindFirstElementInVisualTree<T>(child, nom, ctrl);
                                if (result != null)
                                    return result;                    
                            }
                   
                } 
                return null;
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     DataGridRow item = this.dataGrid2.ItemContainerGenerator.ContainerFromIndex(0) as DataGridRow;
     
     TextBox txtChargeur = FindFirstElementInVisualTree<TextBox>(item, "txtChargeur",  typeof(TextBox));
    Donc dans ce code j'ai rajouter le Type dans les paremetres. Je veux en faite comparer le nom des controles trouvés.
    Ma fonction cherche un textBox, si il en trouve un c'est bien, maintenant j'aimerais qu'il comprate le Name du controle, si le qu'il toruve est egale au nom que je lui passe en paramtètre, alors c'est le bon controle que j'ai recupèré.


    donc c'est dans la partie en vert que j'aimerais cast en fonction du type passé en paramètre.

    Je sais pas si c'est plus claire

    Merci a vous

  7. #7
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Si tu veux simplement comparer les noms, la propriété Name est déclarée dans FrameworkElement, dont héritent tous les contrôles. En somme, il te suffit tout simplement de caster vers FrameworkElement pour comparer leurs noms. Après, tu peux en plus vérifier si leurs types sont identiques, via Object.GetType()

  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 : 37
    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 080
    Points
    8 080
    Par défaut
    T'as deja TextBox qui est passé dans le <T> pourquoi le repasser en parameètre?

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 142
    Points : 74
    Points
    74
    Par défaut
    Merci à vous, en effet avec le FrameworkElement je m'en suis sortie.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/01/2013, 11h01
  2. Réponses: 4
    Dernier message: 19/10/2009, 12h41
  3. Réponses: 3
    Dernier message: 28/07/2005, 21h30
  4. affecter une variable de type stringstream
    Par sorari dans le forum SL & STL
    Réponses: 3
    Dernier message: 24/03/2005, 11h14
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 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