Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何写入Xelement值?_C#_Xml_Generics - Fatal编程技术网

C# 如何写入Xelement值?

C# 如何写入Xelement值?,c#,xml,generics,C#,Xml,Generics,我想创建一个从xml文件中收集自定义childnode值并从表单中重写whit数据的方法。我有一个想法,我在一个ArrayList中收集数据并将其提供给该方法。但是我不能在foreach中更改它,因为它抛出ArgumentOutOfRangeException(尽管ArraList包含8个元素,增量变量的值也为8)。所以我会寻求帮助 代码如下: public static void Search(ArrayList nodeIds, ArrayList values) {

我想创建一个从xml文件中收集自定义childnode值并从表单中重写whit数据的方法。我有一个想法,我在一个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");
}
公共静态无效搜索(ArrayList节点ID、ArrayList值)
{
XDocument doc=XDocument.Load(“Options.xml”);
foreach(文档子体(“基本选项”)中的XElement选项)
{
foreach(nodeIds中的字符串nodeId)
{
if(option.Attribute(“id”).Value==nodeId)
{
var nodes=option.nodes().ToList();
对于(int i=0;i
您确定我没有超出范围吗?如果i==8和value.Count==8,它将崩溃…ArrayList???那是什么?@MatíasFidemraizer你不觉得看到ArrayList和LINQ to XML在一起很感人吗?@Adriano不,这只是一场噩梦。ArrayList从未存在过@阿德里亚诺:是的。事实上,自从.NET2.0推出泛型以来,ArrayList已经过时。执行非常遗留的代码,ArrayList不再存在!OP需要通过回收机:谢谢,你救了我一天:)这几乎是我唯一没有尝试的方法。但它现在工作得很好。我会尽快投票支持你。