2

我想创建一个从 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");
    }
4

1 回答 1

1

在我看来,这i将毫无疑问地超出范围,因为它在3 个 foreach语句的外部声明并在 center 内使用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");
}
于 2013-03-06T14:15:46.637 回答