c#反思问题

时间:2010-03-03 07:54:38

标签: c# .net reflection

我出于某种原因试图使用反射,我遇到了这个问题。

class Service
{
    public int ID {get; set;}
    .
    .
    .
}

class CustomService
{
    public Service srv {get; set;}
    .
    .
    .
}

//main code

Type type = Type.GetType(typeof(CustomService).ToString());
PropertyInfo pinf = type.GetProperty("Service.ID"); // returns null

我的问题是我希望在主要对象的另一个属性中获得一个属性。 有这个目标的简单方法吗?

先谢谢。

2 个答案:

答案 0 :(得分:5)

您需要先获取srv属性的引用,然后获取ID

class Program
{
    class Service 
    { 
        public int ID { get; set; } 
    }

    class CustomService 
    { 
        public Service srv { get; set; } 
    }

    static void Main(string[] args)
    {
        var serviceProp = typeof(CustomService).GetProperty("srv");
        var idProp = serviceProp.PropertyType.GetProperty("ID");

        var service = new CustomService
        {
            srv = new Service { ID = 5 }
        };

        var srvValue = serviceProp.GetValue(service, null);
        var idValue = (int)idProp.GetValue(srvValue, null);
        Console.WriteLine(idValue);
    }
}

答案 1 :(得分:1)

您必须反思自定义服务并找到属性值。之后,你必须反思该属性并找到它的价值。像这样:

var customService = new CustomService();  
customService.srv = new Service() { ID = 409 };  
var srvProperty = customService.GetType().GetProperty("srv");  
var srvValue = srvProperty.GetValue(customService, null);  
var id = srvValue.GetType().GetProperty("ID").GetValue(srvValue, null);  
Console.WriteLine(id);