从Inner-Foreach跳到Outer-Foreach,在你离开的地方保持Inner-Foreach

时间:2013-09-04 08:22:02

标签: c# foreach

我有以下代码:

foreach (XNode rowXml in elements.Nodes())
                         {        
                             foreach (DataRow rowDB in dataSetDB.Tables[0].Rows)
                             {
                                 string itemDB = rowDB[0].ToString().ToUpper();
                                 string itemXml = rowXml.ToString().ToUpper();
                                 if (itemDB == itemXml)
                                 {    
                                    //If itemDB == itemXml; jump to Outer_Foreach
                                 }
                                 if (itemDB != itemXml)
                                 {  
                                     //If itemDB != itemXml; jump to Outer_Foreach
                                 }
                             }

如何摆脱Inner-Foreach和Out-Foreach,并且仍然将两个foreach放在离开它的地方。我循环遍历DB和XML表行。打破;完成跳出Inner-Foreach并且我无法抓住我离开它的地方,所以当我一遍又一遍地遍历它时,我开始回到索引[0]。

2 个答案:

答案 0 :(得分:1)

听起来你需要'for'循环。

 int i = 0;
 int k = 0;
 bool shouldBreak;

 var nodes = elements.Nodes();
 var rows = dataSetDB.Tables[0].Rows;

 for (i = 0; i < nodes.Count(); i++)
 {
     for(k = 0; k < rows.Count(); k++)
     {
        string itemDB = rows[k][0].ToString().ToUpper();
        string itemXml = nodes[i].ToString().ToUpper();
            if (itemDB == itemXml)
            {   
                shouldBreak = true;
                break;
            }
            if (itemDB != itemXml)
            {  
                shouldBreak = true;
                break;
            }
     }
     if (toBreak)
         break;
 }

现在,如果你打破内循环,可以通过访问i和k

来了解它的中断位置

答案 1 :(得分:0)

这个答案是stolen from this answer here。你想要实现的是拉链操作。有关更多信息,请参阅我链接的答案。

var xmlNodes = elements.Nodes();
var dbNodes = dataSetDB.Tables[0].Rows;

var xmlAndDB = xmlNodes.Zip(dbNodes , (x, d) => new { xNode = x, dNode = d });

foreach(var xd in xmlAndDB )
{
    Console.WriteLine(xd.xNode + xd.dNode);

    string itemDB = xd.dNode[0].ToString().ToUpper();
    string itemXml = xd.xNode.ToString().ToUpper();

    if (itemDB == itemXml)
    {    
        //If itemDB == itemXml;
    }
    else /* if (itemDB != itemXml) */ 
    {  
        //If itemDB != itemXml;
    }
}