簡體   English   中英

來自多個數組的foreach循環c#

[英]foreach loop from multiple arrays c#

這應該是一個簡單的問題。 我想知道的是,是否有更好的編碼方式。 我想為每個數組做一個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);                
        }

您可以使用LINQ:

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

我假設conflictsList<TextBox> ,它有一個AddRange方法。 如果不是,則需要在(單個)循環中調用Add
如果您正在創建conflicts (或者如果它開始為空),則可以調用.ToList()

另一種.net 3.5方法: -

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

如果由於某種原因你不能使用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);
var unionResult = vert.Concat(hort).Concat(cube)

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

如果您使用.Net 3.5或更高版本,您應該能夠使用Enumerable.Concat將它們粘合在一起

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

當然有很多方法可以寫這個,但你也可以這樣做

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

如果您嘗試創建Sudoku游戲(在評論中提到),請先閱讀有關Permutation組和Combinatorics的內容。 這將幫助您在文本框中使用foreach選擇更高效的應用程序模型。 使用延遲計算解決了對象減少的問題,但沒有改善你的邏輯人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM