【发布时间】:2011-02-02 16:39:37
【问题描述】:
我有以下课程:
public class MyEventArgs : EventArgs
{
public object State;
public MyEventArgs (object state)
{
this.State = state;
}
}
public class MyClass
{
// ...
public List<string> ErrorMessages
{
get
{
return errorMessages;
}
}
}
当我引发我的事件时,我将 MyEventArgs 对象的“状态”设置为 MyClass 类型的对象。我正在尝试通过在我的事件处理程序中的反射来检索 ErrorMessages:
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);
}
但这会将 errorMessagesInfo 返回为 null(即使 stateInfo 不为 null)。是否可以检索错误消息?
编辑:我应该澄清事件处理程序位于不同的程序集中,并且我无法引用第一个程序集(包含 MyEventArgs 和 MyClass)来解决构建问题。
谢谢
编辑:解决方案
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;
【问题讨论】:
标签: c# reflection object private casting