来自多个数组的foreach循环c#

时间:2010-06-01 14:10:21

标签: c# arrays foreach

这应该是一个简单的问题。我想知道的是,是否有更好的编码方式。我想为每个数组做一个foreach循环,而不必重新声明foreach循环。有没有办法c#投射这个?我想把它放在收藏中......?

请批评我的代码。

        foreach (TextBox tb in vert)
        {
            if (tb.Text == box.Text)                
                conflicts.Add(tb);                
        }
        foreach (TextBox tb in hort)
        {
            if (tb.Text == box.Text)                
                conflicts.Add(tb);                
        }
        foreach (TextBox tb in cube)
        {
            if (tb.Text == box.Text)
                conflicts.Add(tb);                
        }

7 个答案:

答案 0 :(得分:12)

您可以使用LINQ:

conflicts.AddRange(
    vert.Concat(hort).Concat(cube)
        .Where(tb => tb.Text == box.Text)
); 

我假设conflictsList<TextBox>,其AddRange方法。如果不是,则需要在(单个)循环中调用Add 如果您正在创建conflicts,(或者如果它开始为空),您可以改为调用.ToList()

答案 1 :(得分:2)

另一种.net 3.5方法: -

conflicts.AddRange(from textBox in vert.Concat(hort).Concat(cube)
                   where textBox.Text == box.Text
                   select textBox);

答案 2 :(得分:1)

如果由于某种原因无法使用LINQ(我强烈建议你这样做),你可以让你的数组搜索一个方法。例如:

public void FindConflicts(IEnumerable<TextBox> tbList, IList<TextBox> conflicts, string test)
{
   foreach(TextBox tb in tbList)
   {
      if(tb.Text == test)
      {
          conflicts.Add(tb);
      }
   }
}

然后这样称呼它:

FindConflicts(vert, conflicts, box.Text);
FindConflicts(hort, conflicts, box.Text);
FindConflicts(cube, conflicts, box.Text);

答案 3 :(得分:0)

var unionResult = vert.Concat(hort).Concat(cube)

foreach(TextBox tb in unionResult)
    if(tb.Text == box.Text)
        conflicts.Add(tb);

答案 4 :(得分:0)

如果您使用.Net 3.5或更高版本,则应该能够use Enumerable.Concat to glue them together

foreach (TextBox tb in vert.Concat(hort).Concat(cube))

答案 5 :(得分:0)

当然有很多方法可以写这个,但你也可以这样做

  foreach (var direction in new[] { vert, hort, cube })
    foreach (TextBox tb in direction)
      if (tb.Text == box.Text)
        conflicts.Add(tb);

答案 6 :(得分:-1)

如果您尝试创建数独游戏(在评论中提到),请先阅读有关Permutation组和Combinatorics的内容。 这将帮助您在文本框中使用foreach选择更高效的应用程序模型。使用延迟计算解决了对象减少的问题,但没有改善你的逻辑人。