C# 使用反射获取对象属性的属性

C# 使用反射获取对象属性的属性,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

假设我有一个午餐盒类,它有一个属性为FreezerPack,属性为Name

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。我希望有更好的解决方案,但看起来这就是饼干破碎的方式。