-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 и получить класс объекта значения, а затем получить свойство. Но, может быть, есть и другие варианты?
Зачем вам нужно делать это с отражением против просто 'bInsatnce.A.Name'? – juharr
@ Ответ Дерека отвечает на вопрос, как он формулируется в настоящее время, но Selman22 отмечает, что вы отметили это «отражением». Для чего вам нужно размышление? Вы действительно не знаете имена всех классов и свойств? Если это так, пожалуйста, отредактируйте свой вопрос, чтобы отразить то, что вы * не знаете. – adv12