反思:检索财产价值的不同方式

时间:2010-03-03 11:52:37

标签: reflection c#-2.0

我正在通过以下代码检索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 个答案:

答案 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>