【发布时间】:2013-06-18 12:04:40
【问题描述】:
我遇到了一个我似乎无法解决的问题。我有两个相同类型的列表,我需要检查这些列表是否匹配。关于注释掉的 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 如果有重复与否..这就是它在第一个元素上失败的原因。它正在检查第一个元素,它是否重复?返回真。它不是?返回假。它不检查其余部分。
-
我认为代码甚至都不会编译,更不用说进行参考比较了:你不能写
x == y,因为它们是泛型的。