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

Framework .NET Discussion :

Test de type générique hérités


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut Test de type générique hérités
    Bonsoir

    Un problème simple que je ne sais pas résoudre de manière "pas trop sale", et qui, là, est en train de me pourrir la vie

    Soit un type générique X<T>.
    Soit un autre héritant du premier Y<T> : X<T>

    Soit une référence d'object y de type, par exemple Y<string>.

    Comment puis je tester que y est une instance de type héritant de X ?

    Je précise que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                X<int> x = new X<int>();
                Y<string> y = new Y<string>();
                Type tx = x.GetType().GetGenericTypeDefinition();
                Type tY = typeof( Y<object> ).GetGenericTypeDefinition();
                Type ty = y.GetType().GetGenericTypeDefinition();
                Type tX = typeof( X<object> ).GetGenericTypeDefinition();
     
                if (tY.IsSubclassOf(tX))
                {
                 // MARCHE PAS
                }
    Merci aux pros de dotNet de m'aider à trouver une solution.

    (j'aimerais autant ne pas passer par une analyse du nommage, car l'aspect bizarre du FullName des génériques me laisse circonspect sur la pérennité de ce nommage interne avec le quote inversé).

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Y<string> y = new Y<string>();
     
    if (y.GetType().BaseType == typeof(X<string>))
    //blabla
    Non ? Ou j'ai peut etre mal compris la question. =p

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Merci pour ta réponse, car, même si elle ne convient pas (elle suppose que tu connaisse le type du paramètre de généricité de l'instance - hypothèse que je ne souhaite pas faire), elle m'a permis de trouver la bonne solution, qui est :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                Y<string> y = new Y<string>();
                if(y.GetType().BaseType.GetGenericTypeDefinition() == typeof(X<object>).GetGenericTypeDefinition())
                {
                    Console.WriteLine( "CA MARCHE" );
                }
    Merci

    PS : je pense qu'on peut considèrer le fonctionnement du IsSubClassOf ci dessus comme un bug (puisque même avec le même type de généricité, il ne marche pas).

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Voici donc un test de SubClassing général fonctionnant avec les types génériques :

    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
     
            public static bool IsGenericSubClassOf( Type typeToTest, Type baseToCompare )
            {
                if (baseToCompare.IsGenericType == false)
                {
                    return typeToTest.IsSubclassOf( baseToCompare );
                }
                bool end = false;
                while (end == false)
                {
                    Type realTypeToTest = typeToTest.IsGenericType ? typeToTest.GetGenericTypeDefinition() : typeToTest;
                    if (realTypeToTest == baseToCompare.GetGenericTypeDefinition())
                    {
                        return true;
                    }
                    if (typeToTest.BaseType == default( Type ))
                    {
                        end = true;
                    }
                    else
                    {
                        typeToTest = typeToTest.BaseType;
                    }
                }
                return false;
            }
    EDIT : ainsi la méthode fonctionne aussi avec n'importe quel combinaison de types génériques ou non

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

Discussions similaires

  1. Verouillage et test fichier type texte
    Par jmjmjm dans le forum Linux
    Réponses: 3
    Dernier message: 15/01/2007, 18h11
  2. Comment faire un test de type «StartsWith» ?
    Par Oscar Hiboux dans le forum ANT
    Réponses: 4
    Dernier message: 30/11/2006, 15h11
  3. Réponses: 12
    Dernier message: 23/09/2006, 12h12
  4. y a-t-il un support de types génériques pour python ?
    Par silverhawk.os dans le forum Général Python
    Réponses: 15
    Dernier message: 24/03/2006, 18h23
  5. [Debutant] test de type
    Par muquet dans le forum Langage
    Réponses: 4
    Dernier message: 23/01/2006, 11h44

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