none
Récupérer la valeur d'un ENUM en réflexion RRS feed

  • Question

  • Bonjour,

    J'ai une classe qui est la suivante :

        public class ContenuTable : BaseTable {
            public const String TABLE_NAME = "CONTENU_CASE";

            public enum NAME {
                CONTENU_CASE
            }

            public enum FIELDS {
                ID_CONTENU_CASE,
                TEXTE,
                ID_IMAGE,
                ID_CASE,
                ID_STYLE,
                ID_PLAN
            }
        }

    et j'aimerais récupérer via la réflexion soit la valeur de mon ENUM (c'est-à-dire CONTENU_CASE), soit la valeur de mon string (qui est la même).

    Je ne peux malheureusement pas accéder à l'ENUM directement, ni a son type car je passe par une autre classe qui va instancier ma classe que je passe en paramètre.

        public class SQLHelper {
            public enum Methods {
                SELECT,
                INSERT,
                DELETE,
                UPDATE
            }

            private BaseTable workingTable = null;

            private SQLHelper(BaseTable table) {
                workingTable = table;
            }

            public static SQLHelper CreateInstance<T>() {
                Type type = typeof(T);

                ConstructorInfo[] constructorInfo = type.GetConstructors();
                BaseTable baseTable = (BaseTable) constructorInfo[0].Invoke(null);

                return new SQLHelper(baseTable);
            }

            public String CreateRequest(Methods method) {
                StringBuilder result = new StringBuilder();

                if (method.Equals(Methods.INSERT)) {
                    result.Append("INSERT INTO " + workingTable.GetType().GetProperties());
                }

                return result.ToString();
            }
        }

    J'arrive bien à récupérer mon ENUM via la réflexion, et via workingTable.GetType().GetMember("NAME") mais je ne peux pas récupérer ensuite mes valeurs.
    J'ai bien sur fouillé Google de fond en comble... Mais je n'ai pas trouvé mon bonheur.

    Avez-vous une idée ?
    vendredi 2 octobre 2009 09:25

Réponses

  • Bonjour,

    workignTable.GetType().GetNestedType("NAME").GetField("CONTENU_CASE").GetValue(null)

    Pour information, au lieu de réinventer un mécanisme d'accès aux données, vous devriez plustôt regarder du côté des DataSet, Linq To SQL et Linq To Entities...

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    mardi 6 octobre 2009 21:08
    Modérateur