Je les classes suivantes:C# Réflexion - Coulée champ Objet privé
public class MyEventArgs : EventArgs
{
public object State;
public MyEventArgs (object state)
{
this.State = state;
}
}
public class MyClass
{
// ...
public List<string> ErrorMessages
{
get
{
return errorMessages;
}
}
}
Quand je lève mon cas, je mis « Etat » des MyEventArgs objet à un objet de type MyClass. Je suis en train de récupérer ErrorMessages par réflexion dans mon gestionnaire d'événements:
public static void OnEventEnded(object sender, EventArgs args)
{
Type type = args.GetType();
FieldInfo stateInfo = type.GetField("State");
PropertyInfo errorMessagesInfo = stateInfo.FieldType.GetProperty("ErrorMessages");
object errorMessages = errorMessagesInfo.GetValue(null, null);
}
Mais retourne errorMessagesInfo comme nulle (même si stateinfo est non nulle). Est-il possible de récupérer ErrorMessages? Editer: Je dois préciser que le gestionnaire d'événements est dans un assembly différent, et je ne peux pas référencer le premier assembly (qui contient MyEventArgs et MyClass) pour les problèmes de construction.
Merci
Edit: Solution
FieldInfo stateInfo = args.GetType().GetField("State");
Object myClassObj = stateInfo.GetValue(args);
PropertyInfo errorMessagesInfo = myClassObj.GetType().GetProperty("ErrorMessages");
object errorMessagesObj = errorMessagesInfo.GetValue(myClassObj, null);
IList errorMessages = errorMessagesObj as IList;
Merci, mais je n'ai pas une instance de MyClass. En outre, l'expéditeur est un objet d'une classe différente. 0E04E ( – alhazen