Lister les membres d'une classe

Résolu
April_Seb4 Messages postés 19 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 2 octobre 2013 - 5 mars 2008 à 11:46
April_Seb4 Messages postés 19 Date d'inscription mardi 17 février 2004 Statut Membre 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

4 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
5 mars 2008 à 17:26
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 );
    }
}
3
lemmingperceval Messages postés 128 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 2 août 2009 6
5 mars 2008 à 12:41
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
0
lemmingperceval Messages postés 128 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 2 août 2009 6
5 mars 2008 à 12:44
Là dans l'exemple j'ai mis GetValue(), mais si tu regarde tu verras que tu as aussi Name, etc
0
April_Seb4 Messages postés 19 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 2 octobre 2013
6 mars 2008 à 16:50
Merci beaucoup, ça marche nickel

TheVengor
0
Rejoignez-nous