簡體   English   中英

在foreach循環中檢查列表的相等性-C#

[英]Checking the equality of lists in foreach loop - C#

我正在嘗試檢查2個字符串列表的相等性,但是不起作用。 這是我所做的:

foreach (List<string> q in questions)
{
       if (!groupOfQuestions.Except(q).Any()) //I also tried without '!'
       {
             questions.Add(groupOfQuestions);
       }
}

並聲明清單:

List<List<string>> questions = new List<List<string>>();
List<string> groupOfQuestions = new List<string>();

您不能在foreach循環中修改集合,但可以在for循環中進行操作:

  for (int i = questions.Count - 1; i >= 0; --i) {
    List<string> q = questions[i];

    if (!groupOfQuestions.Except(q).Any()) //I also tried without '!'
      questions.Add(groupOfQuestions);
  }

另一種可能性是循環收集的副本

  // Note ".ToList()"
  foreach (List<string> q in questions.ToList())
    if (!groupOfQuestions.Except(q).Any()) //I also tried without '!'
       questions.Add(groupOfQuestions);

您的問題在這條線上:

questions.Add(groupOfQuestions);

在迭代集合時,不能修改它。

您將需要創建一個新的List<List<string>> ,可以將匹配項添加到其中。 例如:

            var questions = new List<List<string>> { 
                new List<string>{"aaa", "bbb", "ccc"},
                new List<string>{"aaa", "bbb", "ddd"},
            };
            var groupOfQuestions = new List<string>() { "ddd" };
            var questionMatches = new List<List<string>>();

            foreach (List<string> q in questions)
            {
                if (!groupOfQuestions.Except(q).Any()) //I also tried without '!'
                {
                    questionMatches.Add(groupOfQuestions);
                }
            }

在foreach中對其進行迭代時,無法修改questions 建立一個新列表並在末尾運行AddRange

var listsToAdd = new List<List<string>>();

foreach (List<string> q in questions)
{
   if (!groupOfQuestions.Except(q).Any())
   {
       questions.Add(groupOfQuestions);
   }
}

questions.AddRange(listsToAdd);

暫無
暫無

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

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