在C#中最好的方法是什么?
string propPath = "ShippingInfo.Address.Street";
我将从映射文件中读取像上面那样的属性路径。我需要能够询问Order对象下面的代码的值将是什么。this.ShippingInfo.Address.Street
在性能和优雅之间取得平衡。所有对象关系图应该是一对一的。 第二部分:如果它是一个List<>或类似的东西,那么添加获取第一个的功能会有多难。
在C#中最好的方法是什么?
string propPath = "ShippingInfo.Address.Street";
我将从映射文件中读取像上面那样的属性路径。我需要能够询问Order对象下面的代码的值将是什么。this.ShippingInfo.Address.Street
在性能和优雅之间取得平衡。所有对象关系图应该是一对一的。 第二部分:如果它是一个List<>或类似的东西,那么添加获取第一个的功能会有多难。
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);
听起来像是一组嵌套的属性调用:
类X有一个名为ShippingInfo的属性;由ShippingInfo表示的类型具有一个名为Address的属性;由Address表示的类型具有一个名为Street的属性。
因此,假设您知道要操作的类X的适当实例:
等等。你明白了。
看起来有点冗长而乏味,确实如此。但这就是您通过反射执行它的方式。
我想知道是否可以使用LINQ to Objects完成相同的事情?
第二部分的答案涉及从List<>中获取X的初始值。