我想创建一个方法,从 xml 文件中收集自定义子节点值并重写表单中的数据。我有一个想法,我在 ArrayList 中收集数据并将其提供给方法。但是我不能在 foreach 中更改它,因为它会抛出 ArgumentOutOfRangeException(尽管 ArraList 包含 8 个元素并且增量变量的值也是 8)。所以我会寻求帮助。
代码如下:
public static void Search(ArrayList nodeIds, ArrayList values)
{
XDocument doc = XDocument.Load("Options.xml");
int i = 0;
foreach (XElement option in doc.Descendants("BasicOptions"))
{
foreach(string nodeId in nodeIds)
{
if (option.Attribute("id").Value == nodeId)
{
foreach (XElement prop in option.Nodes())
{
prop.Value = values[i].ToString();
i++;
}
}
}
}
doc.Save("Options.xml");
}
最佳答案
在我看来,i
毫无疑问会超出范围,因为它是在 3 foreach
语句的外部声明的,并在中心 foreach
。您应该重新考虑您的方法。
我建议,但不知道您的传入值或为什么调用它,将您的内部 foreach
重新声明为 for
语句,如下所示:
public static void Search(ArrayList nodeIds, ArrayList values)
{
XDocument doc = XDocument.Load("Options.xml");
foreach (XElement option in doc.Descendants("BasicOptions"))
{
foreach (string nodeId in nodeIds)
{
if (option.Attribute("id").Value == nodeId)
{
var nodes = option.Nodes().ToList();
for (int i = 0; i < nodes.Count && i < values.Count; i++)
{
XElement node = (XElement)nodes[i];
node.Value = values[i].ToString();
}
}
}
}
doc.Save("Options.xml");
}
关于c# - 如何编写 Xelement 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15249109/