如果属性类 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 不可能:)。在这里我认为需要检查属性名称是否有点,需要使用拆分并获取值对象类,然后获取属性。但也许还有其他变体?

如果属性类 C# 使用反射,如何获取属性值

 var b = new B();
 b.A = new A()
 {
    Name = "Hello World"
 };
 Console.WriteLine(b.A.Name);