Проблема
Использование C#, мне нужно пройти через объект, который был брошен на ExpandoObject
из XML
и заменить любое свойство «цена» с новым значением.В C#, как изменить значение Key-Value-Property при рекурсивном перемещении ExpandoObject?
Этот объект очень неструктурирован и имеет много слоев вложенных узлов (на самом деле это вложенные 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
Какую ошибку вы получаете конкретно? Когда вы запускаете его, какое исключение возникает? – Haney
Какой смысл возвращать kvp? Почему не просто рекурсивно обрабатывать метод void? Или просто не присваивайте результат kvp.Value. – codenheim