C# 使用反射获取对象属性的属性
假设我有一个午餐盒类,它有一个属性为FreezerPack,属性为NameC# 使用反射获取对象属性的属性,c#,.net,reflection,C#,.net,Reflection,假设我有一个午餐盒类,它有一个属性为FreezerPack,属性为Name public class LunchBox { public FreezerPack FreezerPack { get; set; } } public class FreezerPack { public string Name { get; set; } } 使用反射,我可以像这样获得冻结包: var lunchBox = new LunchBox { FreezerPack = new
public class LunchBox
{
public FreezerPack FreezerPack { get; set; }
}
public class FreezerPack
{
public string Name { get; set; }
}
使用反射,我可以像这样获得冻结包:
var lunchBox = new LunchBox
{
FreezerPack = new FreezerPack
{
Name = "I'm so cool"
}
};
var freezerPack = typeof(LunchBox)
.GetProperty("FreezerPack")
.GetValue(lunchBox, null);
但是,当我只有作为T的午餐盒和一个属性路径为“FreezerPack.Name”的字符串时,如何从午餐盒中的FreezerPack中获取名称呢
.GetProperty(“FreezerPack.Name”)
似乎不起作用。不,您需要对FreezerPack的结果进行反思:
var lunchBox = new LunchBox() { FreezerPack = new FreezerPack() { Name = "I'm so cool" } };
var freezerPack = typeof(LunchBox).GetProperty("FreezerPack").GetValue(lunchBox, null);
var freezerPackName = freezerPack.GetType().GetProperty("Name").GetValue(freezerPack, null);
Console.WriteLine(freezerPackName);
dynamic
在这种情况下可能有意义:
dynamic lunchBox = new LunchBox() { FreezerPack = new FreezerPack() { Name = "I'm so cool" } };
string name = lunchBox.FreezerPack.Name;
我认为这只是一个人为的例子。如果你从字面上理解这个例子,就不需要动态或反射,因为我们可以静态地访问类型/属性。我不知道动态还是反射是正确的方法,所以我只是想建议对有趣的虚拟对象使用动态+1。我希望有更好的解决方案,但看起来这就是饼干破碎的方式。