2014-12-19 85 views
-4

我有兩個類如果屬性類C#使用反射,如何獲取屬性值?

public class A 
{ 
    public string Name {get; set;} 
} 

public class B 
{ 
    public A A {get; set;} 
} 

我怎樣才能從A的對象B屬性名稱的價值?

現在我用

 string fromName = GetPropertyName(from); 
     string toName = GetPropertyName(to); 

     PropertyInfo oldProperty = typeof(T).GetProperty(toName); 
     PropertyInfo newProperty = typeof(T).GetProperty(fromName); 

     var oldValue = newProperty.GetValue(item); 

     if (cryptVal != null && !string.IsNullOrWhiteSpace(oldValue.ToString())) 
     { 
      string newVal = provider.get(oldValue.ToString()); 

      property.SetValue(item, newVal, null); 
     } 

     private static string GetPropertyName<T>(Expression<Func<T,object>> property) 
     { 
      var memberNames = new List<string>(); 

      var memberExpression = property.Body as MemberExpression; 

      while (null != memberExpression) 
      { 
       memberNames.Add(memberExpression.Member.Name); 
       memberExpression = memberExpression.Expression as MemberExpression; 
      } 

      memberNames.Reverse(); 

      return string.Join(".", memberNames.ToArray()); 
     } 

,但得到的名字Device.Name不可能:)值。在這裏我認爲需要檢查屬性名是否有點,需要使用Split並獲取value對象類,然後獲取屬性。但也許還有其他變種?

+0

爲什麼你需要使用反射而不僅僅是'bInsatnce.A.Name'? – juharr

+0

@Derek的答案回答了目前制定的問題,但Selman22指出你用「反思」標記了這個問題。你需要反思什麼?你真的不知道所有類和屬性的名稱嗎?如果是這樣,請編輯您的問題以反映您*不知道的內容。 – adv12

回答

0
var b = new B(); 

b.A = new A() 
{ 
    Name = "Hello World" 
}; 

Console.WriteLine(b.A.Name);