我遇到了一個我似乎無法包住我的頭的問題。我有兩個相同類型的列表,我需要檢查這些列表是否匹配。我遇到了有關注釋掉for循環和現在正在使用的嵌套foreach循環的問題。我不需要同時使用兩個,一個是我試圖弄清楚這一點。如何比較兩個列表中的項目?
我已經通過調試器運行了這個,發現這兩個列表保存着相同的數據,我假設(使用VS2010調試器)在列表中的相同元素。但是,當它被循環時,它在第一個元素上失敗。
我從類似的問題研究過這個問題,我對LINQ表達式並不是很熟悉(在空閒時我正在做一個研究筆記)。
private bool ListMatch(List<T> list1, List<T> list2)
{
if (list1 == null && list2 == null)
{
return true;
}
if ((list1 == null) || (list2 == null))
{
return false;
}
if (list1.Count != list2.Count)
{
return false;
}
if(list1.Equals(list2))
{
return true;
}
/*for (var idx = 0; idx < list1.Count; idx++)
{
if(list1[ idx ] != list2[ idx ])
{
return false;
}
}*/
foreach(var x in list1)
{
bool hasDuplicates = false;
foreach(var y in list2)
{
if(x == y)
{
hasDuplicates = true;
break;
}
}
if(hasDuplicates)
{
return true;
}
return false;
}
return true;
}
你是比較引用,而不是值。那是你想要做的嗎? –
你的_if(hasDuplicates)_有_return_如果有重複或不是。這就是爲什麼它在第一個元素上失敗。它檢查第一個元素,是否重複?返回true。不是?返回false。它沒有檢查剩下的部分。 – Reyno
我不認爲代碼甚至可以編譯,更不用說執行引用比較了:因爲它們是泛型,所以不能寫'x == y'。 –