2014-12-19 4 views
-4

У меня есть два классаКак получить значение свойства, если класс свойства C# использует отражение?

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

и

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

Как я могу получить значение имени из объекта 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 и получить класс объекта значения, а затем получить свойство. Но, может быть, есть и другие варианты?

+0

Зачем вам нужно делать это с отражением против просто 'bInsatnce.A.Name'? – juharr

+0

@ Ответ Дерека отвечает на вопрос, как он формулируется в настоящее время, но Selman22 отмечает, что вы отметили это «отражением». Для чего вам нужно размышление? Вы действительно не знаете имена всех классов и свойств? Если это так, пожалуйста, отредактируйте свой вопрос, чтобы отразить то, что вы * не знаете. – adv12

ответ

0
var b = new B(); 

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

Console.WriteLine(b.A.Name); 
Смежные вопросы