如何在 C# 3.0 中比较两个通用列表?
可能的重复:
是否有内置方法来比较集合在 C# 中?
比较 C# 3.0 中通用的两个通用列表的最佳方法是什么?
Possible Duplicate:
Is there a built-in method to compare collections in C#?
What is the best way to compare to generic two generic lists in C# 3.0?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您想无论元素顺序如何进行比较,请尝试此处的 UnorderedEqual 方法:
否则:
If you want to compare regardless of element order, try the UnorderedEqual<T> method from here:
Otherwise:
查看这个答案 ,它提供了一种判断两个序列是否包含相同元素的方法。
Check out this answer, it provides a method that determines whether two sequences contain the same elements.
如果您想比较 .NET 3.5 及更高版本(这是 C# 3.0 附带的框架版本)中的两个序列,那么您应该使用 System.Linq 命名空间中 Enumerable 类的 SeqenceEqual 扩展方法。
但是,为此,它将在它正在比较的 IEnumerable实现中对类型参数 T 使用默认的相等比较器。
如果要更改检查相等性的方式,则应将
IEqualityComparer
的实现传递给 SequenceEqual 方法,以便在比较每个序列中的项目时使用。另外,如果您想查看两个集合是否相等(由
IEnumerable
表示),那么最好的选择是检查使用 Enumerable 类上的 Except 扩展方法 并确保结果set 没有任何条目,并且两个IEnumerable
实现具有相同数量的条目(因为 except 可以返回一个空序列,即使传递给它的长度序列不同),您可以这样做使用计数扩展方法。If you want to compare two sequences in .NET 3.5 and beyond (that's the version of the framework which C# 3.0 ships with), then you should use the SeqenceEqual extension method on the Enumerable class in the System.Linq namespace.
However, for this, it will use the default equality comparer for the type parameter T in the
IEnumerable<T>
implementations it is comparing.If you want to change the way that equality is checked for, then you should pass an implementation of
IEqualityComparer<T>
to the SequenceEqual method to use when comparing the items from each sequence.Also, if you are trying to see if two sets are equal (as represented by
IEnumerable<T>
) then your best bet is to check use the Except extension method on the Enumerable class and make sure that the result set doesn't have any entries, and that bothIEnumerable<T>
implementations have the same number of entries (since Except can return an empty sequence even with different length sequences passed to it) which you can do with the Count extension method.