在C#中解决此问题的最佳方法是什么?
string propPath = "ShippingInfo.Address.Street";
我将拥有一个属性路径,就像从映射文件中读取的那个。 我需要能够向Order对象询问下面代码的值是什么。
this.ShippingInfo.Address.Street
平衡表现与优雅。所有对象图关系应该是一对一的。 第2部分:如果它的列表<>是多么难以添加其抓住第一个的能力。或类似的东西。
答案 0 :(得分:25)
也许是这样的?
string propPath = "ShippingInfo.Address.Street";
object propValue = this;
foreach (string propName in propPath.Split('.'))
{
PropertyInfo propInfo = propValue.GetType().GetProperty(propName);
propValue = propInfo.GetValue(propValue, null);
}
Console.WriteLine("The value of " + propPath + " is: " + propValue);
或者,如果你更喜欢LINQ,你可以尝试这样做。 (虽然我个人更喜欢非LINQ版本。)
string propPath = "ShippingInfo.Address.Street";
object propValue = propPath.Split('.').Aggregate(
(object)this,
(value, name) => value.GetType().GetProperty(name).GetValue(value, null));
Console.WriteLine("The value of " + propPath + " is: " + propValue);
答案 1 :(得分:1)
听起来像是一组嵌套的属性调用:
类X有一个名为ShippingInfo的属性;由ShippingInfo表示的类型具有属性地址; Address表示的类型有一个名为Street的属性。
因此,假设您知道要操作的X类的适当实例:
等等。你得到了照片。
似乎有点冗长乏味,而且确实如此。但这就是你如何通过反思来做到这一点。
我想知道LINQ to Objects是否可以做同样的事情?
第2部分的答案涉及从列表中获取X的初始值<>。