在C#中检查两个List <T>列表是否相等的最佳方法是什么?

Spe*_*nce 18 c# linq equality list

有很多方法可以做到这一点,但我觉得我错过了一个功能或其他东西.

显然List == List会使用Object.Equals()并返回false.

如果列表中的每个元素都相等并且出现在相反列表中的相同位置,那么我认为它们是相等的.我正在使用值类型,但正确实现的Data对象应该以相同的方式工作(即我不是在寻找浅复制列表,只是内部每个对象的相同).

我尝试过搜索,也有类似的问题,但我的问题是每个元素的确切顺序.

lep*_*pie 40

Enumerable.SequenceEqual<TSource>
Run Code Online (Sandbox Code Playgroud)

MSDN

  • @Spence - 是的,当序列长度不同或无序时,SequenceEqual 返回 false:http://msdn.microsoft.com/en-us/library/bb348567.aspx (3认同)

Spe*_*nce 5

邪恶的实施是

if (List1.Count == List2.Count)
{
   for(int i = 0; i < List1.Count; i++)
   {
      if(List1[i] != List2[i])
      {
         return false;
      }
   }
   return true;
}
return false;
Run Code Online (Sandbox Code Playgroud)

  • 这几乎正​​是内置 SequenceEqual 方法的工作原理,如 leppie 的答案所示。(如果集合具有不同长度但仅限于 IList&lt;T&gt;,则您的版本将比 SequenceEqual 返回稍快,而 SequenceEqual 将适用于任何 IEnumerable&lt;T&gt;。) (2认同)