反射:获取属性值的不同方式
Posted
技术标签:
【中文标题】反射:获取属性值的不同方式【英文标题】:Reflection: different ways to retrieve property value 【发布时间】:2010-03-03 11:52:36 【问题描述】:我正在通过以下代码检索 IEnumerable 属性列表:
BindingFlags bindingFlag = BindingFlags.Instance | BindingFlags.Public;
var dataProperties = typeof(myParentObject).GetProperties(bindingFlag);
然后我遍历列表并检索每个属性的值。
我遇到了两种不同的方法来做到这一点,只是想知道它们之间有什么区别:
1)
object propertyValue = property.GetGetMethod().Invoke(myObject, null);
2)
object propertValue = property.GetValue(myObject, null)
【问题讨论】:
【参考方案1】:其实没有区别。使用Reflector可以看到GetValue的实现:
public override object GetValue(object obj, BindingFlags invokeAttr,
Binder binder, object[] index,
CultureInfo culture)
MethodInfo getMethod = this.GetGetMethod(true);
if (getMethod == null)
throw new ArgumentException(
Environment.GetResourceString("Arg_GetMethNotFnd"));
return getMethod.Invoke(obj, invokeAttr, binder, index, null);
这里的实际类型是 RuntimePropertyInfo(PropertyInfo 是一个抽象类,不提供 GetValue 的实现)。
【讨论】:
以上是关于反射:获取属性值的不同方式的主要内容,如果未能解决你的问题,请参考以下文章