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 J'ai un code comme celui-ci: p> membreInfo [] code>. Je ne comprends pas comment convertir
membreInfo [] code> sur
Enum code>.
//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 <---
3 Réponses :
Utiliser getfields code> au lieu de
getMembers code>, puis appelez
getvalue (null) code> pour obtenir la valeur Enum. P>
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)) CODE>
Vous pouvez utiliser
foreach(var member in memberinfos) { Enum.Parse(typeof(MyEnum),member.Name) }
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");
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 code> comparé à l'approche de réflexion cependant est que l'on ne peut pas lire des attributs personnalisés des valeurs.
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 ?