8
votes

Convertir des membresInfo [] à Enum

Je cherche un moment, mais je n'ai pas trouvé les solutions. J'ai une assemblée dans un GAC. Je dois le charger en utilisant la réflexion. Après cela, j'ai besoin d'obtenir et de m'adresser à Enum. Mais au lieu de cela, je peux simplement obtenir membreInfo [] code>. Je ne comprends pas comment convertir membreInfo [] code> sur Enum code>.

J'ai un code comme celui-ci: p>

//test assembly contains 
public class MyClass
{
    public enum MyEnum 
    {
        MyVavue, 
        MyValue2
    }
}

Assembly s = Assembly.Load("test");
Type type = s.GetTypes()[1];
MemberInfo[] memberInfos = type.GetMembers(
    BindingFlags.Public | 
    BindingFlags.Static);

//I need to convert memberInfos to MyEnum
//and after that receive ---> MyEnum.MyValue <---  


4 commentaires

Essayez-vous d'obtenir le membreInfo d'un énumé à l'assemblée du GAC? Ou qu'est-ce que vous demandez exactement parce que je ne suis pas sûr à 100%.


J'essaie d'être énumé. Et adresse à cela par ex. Myenum.one de GAC je peux charger l'assemblage.


Un exemple court mais complet ou ce que vous essayez de réaliser serait vraiment aider. Essayez-vous de trouver un champ, une propriété, autre chose?


Alors quelque chose comme ceci: geekswithblogs.net/shahed/archive/2006/12 /06/100427.aspx ?


3 Réponses :


7
votes

Utiliser getfields au lieu de getMembers , puis appelez getvalue (null) pour obtenir la valeur Enum.


1 commentaires

C'est la réponse la plus simple et plus précise. Il suffit d'utiliser typeof (t) .getfields (). Sélectionnez (A => (T) A.Getvalue (NULL))



3
votes

Vous pouvez utiliser

foreach(var member in memberinfos)
{
 Enum.Parse(typeof(MyEnum),member.Name)
}


0 commentaires

5
votes

Vous devez simplement utiliser Enum.getvalues ​​ code>. C'est exactement ce qu'il fait - utilise la réflexion pour obtenir les champs Enum:

Assembly s = Assembly.Load("test");
Type type = s.GetTypes()[1];
object[] values = Enum.GetValues(type);
object myValue = values.First(v => v.ToString() == "MyValue");


3 commentaires

Les valeurs donnent deux résultats, mais ils sont indéfinis et je n'ai pas de type myenum. Il existe dans l'autre assemblée.


On dirait qu'il y a un problème de coulée) mais merci pour une bonne réponse


+1 - C'est une bonne approche. La limitation de getvalues ​​ comparé à l'approche de réflexion cependant est que l'on ne peut pas lire des attributs personnalisés des valeurs.