我正在通过以下代码检索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)
答案 0 :(得分:4)
事实上,没有区别。您可以使用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 的实现。)< / p>