Lister les membres d'une classe [Résolu]

April_Seb4
Messages postés
19
Date d'inscription
mardi 17 février 2004
Dernière intervention
2 octobre 2013
- 5 mars 2008 à 11:46 - Dernière réponse : April_Seb4
Messages postés
19
Date d'inscription
mardi 17 février 2004
Dernière intervention
2 octobre 2013
- 6 mars 2008 à 16:50
Bonjour

J'explique mon problème
J'utilise une API pour gérer une carte d'affichage qui demande des uint en entrée
J'ai voulu utiliser une enum qui se caractérisait de la sorte

public enum eEssai : uint
{
Param1 = 0x3,
Param2 = 0x5
}

Cela pourrait fonctionner mais je serais obligé de faire des casts dans tous mes appels de fonction
J'ai donc décidé de passer par une classe et des membres publics sous forme de constante

public class cEssai
{
public const uint Param1 = 0x3;
public const uint Param2 = 0x5;
}

Du coup, exit le cast cependant je n'arrive pas à parcourir la classe pour connaitre tous les membres publics de type uint (pour le proposer dans une combo), chose qui est assez simple avec des enums

Des idées, des propositions ?
Merci

TheVengor
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Lutinore
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
- 5 mars 2008 à 17:26
3
Merci
Salut, c'est bien en passant par System.Reflection comme le montre lemmingperceval :

public static class Params
{
    public const uint Param1 = 0x3;
    public const uint Param2 = 0x5;


    public static string[ ] GetNames( )
    {
        Type t = typeof( Params );
        FieldInfo[ ]fields = t.GetFields(
            BindingFlags.Public | BindingFlags.Static );


        List< string > names = new List< string >( 10 );


        foreach( FieldInfo fi in fields )
        {
            if ( fi.IsLiteral )
                names.Add( fi.Name );
        }


        return names.ToArray( );
    }


    public static uint GetValueFromName( string name )
    {
        Type t = typeof( Params );
        FieldInfo fi = t.GetField( name,
            BindingFlags.Public | BindingFlags.Static );


        if ( fi == null )
            throw new ArgumentOutOfRangeException( "name" );


        return ( uint )fi.GetValue( null );
    }
}

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Lutinore
lemmingperceval
Messages postés
128
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
2 août 2009
- 5 mars 2008 à 12:41
0
Merci
salut,
Regarde cela:

private

object obj = new {Class à instancier}

PropertyInfo[] propertyInfo = obj.GetType().GetProperties();

foreach (
PropertyInfo currentProperty
in propertyInfo)
{
         
currentProperty.GetValue(obj,
null).ToString();
}

Ca c'est pour les propriétés, mais si tu fais un MethodInfo[]
ca te donnera les méthodes, FieldInfo[] te donnera les champs, etc
Commenter la réponse de lemmingperceval
lemmingperceval
Messages postés
128
Date d'inscription
mardi 18 décembre 2007
Dernière intervention
2 août 2009
- 5 mars 2008 à 12:44
0
Merci
Là dans l'exemple j'ai mis GetValue(), mais si tu regarde tu verras que tu as aussi Name, etc
Commenter la réponse de lemmingperceval
April_Seb4
Messages postés
19
Date d'inscription
mardi 17 février 2004
Dernière intervention
2 octobre 2013
- 6 mars 2008 à 16:50
0
Merci
Merci beaucoup, ça marche nickel

TheVengor
Commenter la réponse de April_Seb4

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.