c# - 使用反射获取嵌套对象属性值

标签 c# asp.net reflection

我有以下两个类:

public class Address
{
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
}

public class Employee
{
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public Address EmployeeAddress { get; set; }
}

我有一个员工类的实例如下:

    var emp1Address = new Address();
    emp1Address.AddressLine1 = "Microsoft Corporation";
    emp1Address.AddressLine2 = "One Microsoft Way";
    emp1Address.City = "Redmond";
    emp1Address.State = "WA";
    emp1Address.Zip = "98052-6399";

    var emp1 = new Employee();
    emp1.FirstName = "Bill";
    emp1.LastName = "Gates";
    emp1.EmployeeAddress = emp1Address;

我有一个根据属性名称获取属性值的方法,如下所示:

public object GetPropertyValue(object obj ,string propertyName)
{
    var objType = obj.GetType();
    var prop = objType.GetProperty(propertyName);

    return prop.GetValue(obj, null);
}

上述方法适用于像 GetPropertyValue(emp1, "FirstName") 这样的调用,但是如果我尝试 GetPropertyValue(emp1, "Address.AddressLine1") 它会抛出一个异常,因为 objType.GetProperty(propertyName); 无法找到嵌套的对象属性值。有办法解决这个问题吗?

最佳答案

public object GetPropertyValue(object obj, string propertyName)
{
    foreach (var prop in propertyName.Split('.').Select(s => obj.GetType().GetProperty(s)))
       obj = prop.GetValue(obj, null);

    return obj;
}

谢谢,我来这里是为了寻找同样问题的答案。我最终修改了您的原始方法以支持嵌套属性。这应该比必须执行嵌套方法调用更可靠,嵌套方法调用最终可能会超过 2 个嵌套级别。

关于c# - 使用反射获取嵌套对象属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2535287/

相关文章:

javascript - jQuery 验证 - 如何显示错误时的默认标注?

reflection - 如何从 Rust 函数内部检查它是直接调用还是由 C# 代码中的 Invoke() 调用?

c# - 如何在没有 MethodInfo 的情况下使用 MSIL *调用实例上的方法?

C#并行IO完成端口

c# - 为 REST 服务异步返回 http 状态码 202?

c# - “The Task Was Cancelled” HTTP客户端默认超时值

c# - 从外部服务器获取图像

c# - ASP.NET MVC C# Razor SQL 1 of 2 几乎相同的更新查询不起作用

java - 枚举的 values() 方法访问级别

c# - 加快 C# 中的查询生成器(字符串连接)