的问题
使用C#,我需要遍历已被强制转换为ExpandoObject
从XML
一个对象,并用新的值来代替“价格”属性。在C#中,如何在递归遍历ExpandoObject的同时更改Key-Value-Property的值?
该对象是非结构化的,并且有许多嵌套节点层(实际上是嵌套的ExpandoObjects)。更具体地讲,层次结构可能看起来像这样:
产品=>价格,数量,配件
每个配件可以有一个价格和数量,并可能本身具有的配件,这就是为什么我需要递归。
我有什么到目前为止
public ExpandoObject UpdatePricing(ExpandoObject exp)
{
//Is there a price property?
var hasPrice = exp.Any(a => a.Key == "price");
if (hasPrice)
{
//update price here
exp.price = 0; //Some other price
}
//Now loop through the whole object. If any of the properties contain an expando, then call this method again
foreach (var kvp in exp)
{
if (kvp.Value is ExpandoObject)
{
//THIS CODE IS NO GOOD BECAUSE kvp.Value has no setter!!
kvp.Value = UpdatePricing(kvp.Value);
}
}
return exp;
}
我遇到的问题是,kvp.Value
没有二传手,所以我不能递归运行这个方法。
任何建议表示赞赏。谢谢!
我会重新组织树中的结构。 – BlueTrin 2014-10-17 23:24:13
你有什么特别的错误?当你运行它时,会发生什么异常? – Haney 2014-10-17 23:25:59
返回kvp的意义何在?为什么不只是用void方法递归处理呢?或者避免将结果分配给kvp.Value。 – codenheim 2014-10-17 23:26:40