[英]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.