如果属性类 C# 使用反射,如何获取属性值
本文关键字:属性 何获取 获取 反射 如果 | 更新日期: 2023-09-27 18:34:47
我有两个类
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 不可能:)。在这里我认为需要检查属性名称是否有点,需要使用拆分并获取值对象类,然后获取属性。但也许还有其他变体?
var b = new B();
b.A = new A()
{
Name = "Hello World"
};
Console.WriteLine(b.A.Name);