2010-03-03 10 views
5

almak için: Yansıma: farklı yolları Aşağıdaki kodu aracılığıyla özelliklerin IEnumerable listesi alınırken ediyorum özellik değerini

BindingFlags bindingFlag = BindingFlags.Instance | BindingFlags.Public; 
var dataProperties = typeof(myParentObject).GetProperties(bindingFlag); 

Sonra listesi üzerinden yineleme ve her özellik için bir değer alınırken ediyorum.

Bunu yapmak için iki farklı yaklaşımlar rastlamak ve sadece fark aralarında olduğunu merak ettik:)

1 Aslında

object propertyValue = property.GetGetMethod().Invoke(myObject, null); 

2)

object propertValue = property.GetValue(myObject, null) 

cevap

4

, fark yoktur. Sen Reflector kullanarak GetValue uygulanmasını görebilirsiniz:

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); 
} 

fiili türü burada RuntimePropertyInfoolduğu (PropertyInfogetValue için uygulanmasını sağlamaz soyut sınıftır).

İlgili konular