的問題
使用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