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 :

méthode avec type de retour inconnu à l'avance


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 229
    Par défaut méthode avec type de retour inconnu à l'avance
    Bonjour,

    J'ai besoin de créer une méthode générique, qui prend comme paramètre une DataColumn et une valeur(string), et me retourne la valeur avec le type de DataColumn. Je veux faire une chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    public XXX GetValueWithType(DataColumn col, String val)
    {
    return (col.DataType) val;
    }
    Mais je sais pas que ce que je fais au niveau du code de retour XXX (qui en principe un int ou string ou decimal ou bool, ...)

    Merci D'avance

  2. #2
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    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 : Avril 2009
    Messages : 468
    Par défaut
    Bonjour,

    Si tu ne sais vraiment pas ce que tu peux retourner, tu peux toujours retourner Object, mais si tu veux faire des traitements derrière il va falloir caster, et donc connaitre le type...

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 229
    Par défaut
    En fait, mon but est de ne pas utiliser cast ...
    Je veux, par exemple si la DataColumn est de type decimal, avoir une chose comme ça (SANS FAIRE CAST):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    decimal d = GetValueWithType(col,"2");

  4. #4
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    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 : Avril 2009
    Messages : 468
    Par défaut
    Ba ça peut fonctionner pour ce cas si le retour est un decimal, mais il va quand même te faire un cast (implicite).

    Je ne comprends pas bien l'utilité de cette méthode...

    Sinon tu peux renvoyer un KeyPairValue avec en clé le type et sa valeur correspondante pour faire un cast pseudo dynamique.

  5. #5
    Membre très actif Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Par défaut
    Bonjour,

    Une méthode générique devrait correspondre à ta demande :

    La méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public T GetValueWithType<T>(DataColumn col, String val)
    {
          //Le code
    }
    L'appel de cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    decimal dec= feuille.GetContentCell<decimal >(col,"2");

  6. #6
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Citation Envoyé par Pynouz Voir le message
    Bonjour,

    Une méthode générique devrait correspondre à ta demande :

    La méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public T GetValueWithType<T>(DataColumn col, String val)
    {
          //Le code
    }
    L'appel de cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    decimal dec= feuille.GetContentCell<decimal >(col,"2");
    Cela ne fonctionnera a priori pas, car tu ne pourras pas faire de cast avec ton type générique T. Donc impossible de retourner un double. Tu vas vite t'en rendre compte en essayant de compléter "le code".
    Ou alors tu as une astuce que je ne connais pas, et là ça m'intéresse !

  7. #7
    Membre très actif Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Par défaut
    Je ne sais pas si c'est ce que tu voulais dire mais voilà un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public T GetValueWithType<T>(DataColumn col, String val)
    {
          decimal dec = 1;
          return (T)(object)dec;
    }
    Mais j'utilise cette méthode générique pour lire les valeurs d'une cellule excel en retournant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return _worksheet.get_Range(nomColonne + Ligne).Value;
    Qui est de type dynamic, il n'y a donc pas de problème avec la généricité.

  8. #8
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Cela ne fonctionnera a priori pas, car tu ne pourras pas faire de cast avec ton type générique T. Donc impossible de retourner un double. Tu vas vite t'en rendre compte en essayant de compléter "le code".
    Citation Envoyé par Bluedeep Voir le message
    Et j'ai réédité quand j'ai réalisé que cela ne donnerait pas grand chose
    On est bien d'accord, bien que le concept soit challengeant, il n'y a pas de vraie plus-value, et l'implémentation ne donnera pas satisfaction.

Discussions similaires

  1. Méthode de type de retour une classe
    Par woresa dans le forum Général Java
    Réponses: 3
    Dernier message: 12/11/2013, 19h29
  2. Template et fonction amie / type de retour inconnu
    Par Armas dans le forum Débuter
    Réponses: 13
    Dernier message: 24/04/2013, 15h17
  3. Comment Créer une vue avec nombre de colonnes inconnu d'avance ?
    Par masterx_goldman dans le forum Développement
    Réponses: 3
    Dernier message: 21/10/2009, 17h28
  4. Type de retour inconnu
    Par tittoto dans le forum C++
    Réponses: 4
    Dernier message: 04/12/2008, 12h29
  5. Exception et méthode avec valeur de retour
    Par gmonta31 dans le forum Langage
    Réponses: 2
    Dernier message: 10/10/2008, 12h54

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