如何在 C# 3.0 中比较两个通用列表?

发布于 2024-08-21 05:34:47 字数 237 浏览 2 评论 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

娇纵 2024-08-28 05:34:47

如果您想无论元素顺序如何进行比较,请尝试此处的 UnorderedEqual方法:

否则:

var list1 = new List<int> { 1, 2, 3 };
var list2 = new List<int> { 1, 2, 3 };
var areSame = Enumerable.SequenceEqual(list1, list2);

If you want to compare regardless of element order, try the UnorderedEqual<T> method from here:

Otherwise:

var list1 = new List<int> { 1, 2, 3 };
var list2 = new List<int> { 1, 2, 3 };
var areSame = Enumerable.SequenceEqual(list1, list2);
幸福丶如此 2024-08-28 05:34:47

查看这个答案 ,它提供了一种判断两个序列是否包含相同元素的方法。

Check out this answer, it provides a method that determines whether two sequences contain the same elements.

迷离° 2024-08-28 05:34:47

如果您想比较 .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 both IEnumerable<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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文