Если это было плохо, то, почему это функция на языке! Это имеет цель, и Вы нашли его.
я часто пишу код точно как в Вашем примере. Когда Вы хотите инициализировать переменную, и существует немного вычисления, для которого нужно выполнение для разработки то, чем это должно быть, и это включает несколько переменных... тогда, Вы не хотите те переменные, бродящие вокруг для всего объема Вашей функции, тогда немного объема для содержания инициализации работает отлично.
Мини-объемами является простой способ повредить код в 'абзацы'. Если Вы разделяете на методы, можно сделать код тяжелее для навигации, когда те методы ниоткуда еще не становятся названными и имеют последовательный вид порядка, в котором они должны быть выполнены.
Это всегда - баланс, но если Вы думаете, что будет самым легким поддержать, и это на самом деле увеличивает стоимость будущего читателя Вашего кода, если все встраивают, то пойдите для него.
нет никаких жестких правил. Я немного иногда устаю от коллег, которые чрезмерно поместили все в его собственный метод или класс или файл, и это становится кошмаром для навигации. Где-нибудь существует хороший баланс!
Для обновления вашего xml используйте метод SetElementValue XElement:
var items = from item in xmlDoc.Descendants("item")
where item.Element("itemID").Value == itemID
select item;
foreach (XElement itemElement in items)
{
itemElement.SetElementValue("name", "Lord of the Rings Figures");
}
EDIT: Да, я попробовал ваш example и сохраняет обновленные данные в файл. Сохраните обновленный xml с помощью метода Save в XDocument , вот код, который я пробовал:
string xml = @"<items>
<item>
<itemID>1</itemID>
<isGadget>True</isGadget>
<name>Star Wars Figures</name>
<text1>LukeSkywalker</text1>
</item>
</items>";
XDocument xmlDoc = XDocument.Parse(xml);
var items = from item in xmlDoc.Descendants("item")
where item.Element("itemID").Value == "1"
select item;
foreach (XElement itemElement in items)
{
itemElement.SetElementValue("name", "Lord of the Rings Figures");
}
xmlDoc.Save("data.xml");
Ваш запрос проецируется на анонимный тип. Если вы хотите просто изменить сами элементы, вам нужно что-то вроде:
var items = from item in xmlDoc.Descendants("item")
where item.Element("itemID").Value == itemID
select item;
Иначе известное как:
var items = xmlDoc.Descendants("item")
.Where(item => item.Element("itemID").Value == itemID);
Я предлагаю вам также вызвать ToList ()
, чтобы выполнялся весь запрос и результаты сохраняются в списке, прежде чем вы начнете изменять что-либо:
var items = xmlDoc.Descendants("item")
.Where(item => item.Element("itemID").Value == itemID)
.ToList();