2

xml ファイルからカスタム childnode 値を収集し、フォームから聖霊降臨祭のデータを書き換えるメソッドを作成したいと思います。ArrayList でデータを収集し、それをメソッドに渡すという考えがありました。しかし、ArgumentOutOfRangeException がスローされるため、foreach で変更することはできません (ただし、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

3つのステートメントiに対して外部で宣言され、センター内で使用されるため、問題なく範囲外になるように思われます。アプローチを再考する必要があります。 foreachforeach

私は提案しますが、あなたの入ってくる値やなぜあなたがこれを呼ぶのかを知らずに、あなたの内部を次のようなステートメントとして再宣言することをお勧めし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 に答える