我正在嘗試做一個foreach遍歷 3 個串列的回圈。這是我目前擁有的:
foreach (Button btn in appList && sequenceLsit && FunctionList)
{
if (btn.FillColor != Color.White)
{
// Do stuff
}
}
我嘗試使用元組,但據我所知,它們為每個串列使用一個單獨的變數。對于所有 3 個串列,我需要一個變數 (btn)。
uj5u.com熱心網友回復:
foreach回圈列舉一個串列。如果您有三個單獨的串列,那么您需要先從它們創建一個串列,然后可以列舉。最簡單的方法是Enumerable.Concat擴展方法:
foreach (Button btn in appList.Concat(sequenceLsit).Concat(FunctionList))
uj5u.com熱心網友回復:
有幾種方法可以解決這個問題。你可以:
- 如 John 所述,一次遍歷每個串列(foreach inside foreach inside foreach)
- 如果您的串列共享相同的型別(您的串列是如何宣告的?),則將它們聯合在一起,然后使用單個 foreach 回圈遍歷它們一次
此外,您可以使用 LINQ 來消除對 IF 陳述句的需要,如下所示: foreach (var btn in appList.Where(x => x.FillColor != Color.White)) {...}
uj5u.com熱心網友回復:
您可以使用Enumerable.Concat方法
foreach (Button btn in appList.Concat(sequenceLsit).Concat(FunctionList))
{
if (btn.FillColor != Color.White)
{
// Do stuff
}
}
uj5u.com熱心網友回復:
@John 為您提供了.Concat,但您也許可以用不同的方法解決您的問題:
- 創建適用于按鈕的方法
var CheckButtons(IEnumerable<Button> buttons) { foreach (Button btn in buttons) { if (btn.FillColor != Color.White) { // Do stuff } } } ... - 在您的清單上呼叫它:
CheckButtons(appList); CheckButtons(sequenceLsit); CheckButtons(FunctionList);
uj5u.com熱心網友回復:
另一種解決方案是安裝System.Interactive包(由dotnetfoundation擁有),并使用該EnumerableEx.Concat方法。它有這個簽名:
// Concatenates the input sequences.
public static IEnumerable<TSource> Concat<TSource>(
params IEnumerable<TSource>[] sources);
使用示例:
foreach (Button btn in EnumerableEx.Concat(appList, sequenceList, functionList))
{
//...
您可以在此處找到此方法的源代碼。這很微不足道。
uj5u.com熱心網友回復:
擴展約翰的回答,如果您要使用 LINQ,為什么不一直使用呢?
foreach (var btn in appList.Concat(sequenceList).Concat(FunctionList)
.Where(b => b.FillColor != Color.White))
{
// do stuff with btn
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/493263.html
上一篇:React:如何在`contentEditable`div上使用`InputEvent`引數捕獲`onInput`事件?
