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

Signaler
Messages postés
19
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
2 octobre 2013
-
Messages postés
19
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
2 octobre 2013
-
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
A voir également:

4 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
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 );
    }
}
Messages postés
128
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
2 août 2009
3
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
Messages postés
128
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
2 août 2009
3
Là dans l'exemple j'ai mis GetValue(), mais si tu regarde tu verras que tu as aussi Name, etc
Messages postés
19
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
2 octobre 2013

Merci beaucoup, ça marche nickel

TheVengor