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

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

4 réponses

Répondre au sujet
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 5 mars 2008 à 17:26
+3
Utile
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 );
    }
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Lutinore
lemmingperceval 128 Messages postés mardi 18 décembre 2007Date d'inscription 2 août 2009 Dernière intervention - 5 mars 2008 à 12:41
0
Utile
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 128 Messages postés mardi 18 décembre 2007Date d'inscription 2 août 2009 Dernière intervention - 5 mars 2008 à 12:44
0
Utile
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 19 Messages postés mardi 17 février 2004Date d'inscription 2 octobre 2013 Dernière intervention - 6 mars 2008 à 16:50
0
Utile
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.