我出于某种原因试图使用反射,我遇到了这个问题。
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
我的问题是我希望在主要对象的另一个属性中获得一个属性。 有这个目标的简单方法吗?
先谢谢。
答案 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);