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 dynamique et classe générique


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Par défaut Cast dynamique et classe générique
    Bonjour à tous,

    j'ai un petit problème dans mon application .

    j'ai un classe Pair, qui est une classe générique dont voici le code

    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
    public class Pair<T>
        {
            public T First { get; set; }
     
            public object Second { get; set; }
     
            public Pair() { }
     
            public Pair(T first, object second)
            {
                First = first;
                Second = second;
            }
     
            public Pair(T first)
                : this(first, null)
            { }
        }
    et j'ai une méthode qui me retourne un string en fonction du type du paramètre

    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
    public static string ValueToStringFormat(object someValue)
            {
                string FormattedValue = "";
     
                if (someValue == null)
                {
                    FormattedValue = "NULL";
                }
                else
                {
                    switch (someValue.GetType().Name)
                    {
                        case "String": FormattedValue = "'" + ((string)someValue).Replace("'", "''") + "'"; break;
                        case "DateTime": FormattedValue = "'" + ((DateTime)someValue).ToString("yyyy/MM/dd hh:mm:ss") + "'"; break;
                        case "DBNull": FormattedValue = "NULL"; break;
                        case "Boolean": FormattedValue = (bool)someValue ? "1" : "0"; break;
                        case "Pair`1":
                            //?????????
                            break;
                        default: FormattedValue = someValue.ToString(); break;
                    }
                }
                return FormattedValue;
            }
    Mon but est de remplacer les ????? par un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValueToStringFormat(someValue.First) + (someValue.Second != null) ? " And " + ValueToStringFormat(someValue) : String.Empty;
    Le problème, c'est que pour ça, il faudrait que je puisse caster someValue en Pair<>, vu que je ne suis pas censé connaitre le type, mais ça ne marche pas et je ne sais pas du tout si c'est possible.

    Si quelqu'un a une idée, je l'en remercie

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Tout d'abord une petite remarque, ton code de ValueToString n'est pas générique, car ton switch-case est en dur:
    Ensuite pour ce que tu veux faire
    • soit tu castes ton objet en "Pair", vu que ton switch est en dur

    • soit via la réflexion tu récupères toutes les propriétés, sur lesquelles tu récupères le type pour pouvoir ensuite récupérer la valeur suivant le format voulu.

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    plutot que de faire comme celà, il serait plus logique que ton objet générique fournisse une méthode "ToString" ou équivalente. Ainsi, la personne implémentant ton type générique pourra redéfinir la méthode "ToString()" pour lui faire dire ce qu'elle veut...

    Je ferais à l'équivalent du Framework avec sa méthode ToString() de chaque objet qui est "overridable"

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Par contre le coup du ToString() je suis plutot contre, en effet sur le coup c'est bien pratique, mais sur le long terme si tu dois mettre en place un certain format c'est plus très maintenanble.

    Ou mieux, faire que ta classe hérite d'une interface

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Par défaut
    Personnellement je rejoins l'idée de theMonz31, car dans le cas où tu auras des Pair<Pair<String>>, tu devras encore rajouter dans ton switch un nouveau cas, et on en sort plus vraiment.

Discussions similaires

  1. Réponses: 9
    Dernier message: 15/02/2013, 23h27
  2. Cast de classe générique
    Par darkfrag dans le forum C#
    Réponses: 3
    Dernier message: 17/03/2009, 14h07
  3. Cast dynamique dans class generique
    Par topolino dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/03/2009, 16h21
  4. [DP][héritage]sous-casting dynamique
    Par Le prophete dans le forum Général Java
    Réponses: 4
    Dernier message: 20/08/2004, 11h56
  5. [tomcat]chargement dynamique de classes depuis une webapp
    Par alphamax dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/03/2004, 09h59

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