C# 默认情况下,使用数学集合等式设置类

C# 默认情况下,使用数学集合等式设置类,c#,hashset,C#,Hashset,HashSet不对默认相等操作使用set相等语义 var a = new HashSet<int> { 1, 2, 3 }; var b = new HashSet<int> { 3, 2, 1 }; 而在数学意义上,这两个集合是相等的。当然,我们可以使用SetEquals明确地使用set equality进行比较: var d = a.SetEquals(b); // true 如果我们创建这些集合的集合: var e = new HashSet<HashSe

HashSet
不对默认相等操作使用set相等语义

var a = new HashSet<int> { 1, 2, 3 };
var b = new HashSet<int> { 3, 2, 1 };
而在数学意义上,这两个集合是相等的。当然,我们可以使用
SetEquals
明确地使用set equality进行比较:

var d = a.SetEquals(b); // true
如果我们创建这些集合的集合:

var e = new HashSet<HashSet<int>> { a, b };
(这是基于所示的一个。)

用法示例:

var a = new MathSet<int> { 1, 2, 3 };
var b = new MathSet<int> { 3, 2, 1 };

var c = a.Equals(b);                        // true

var d = new MathSet<MathSet<int>> { a, b }; // contains one element

var e = a == b;                             // true
var a=新的数学集{1,2,3};
var b=新的数学集{3,2,1};
var c=a等于(b);//真的
var d=新的数学集{a,b};//包含一个元素
变量e=a==b;//真的
有更好的方法吗


图书馆里已经有类似的课程了吗?

我不认为有非第三方的课程,是的,在你的情况下,这是最好的方法。
public sealed class MathSet<T> : HashSet<T>, IEquatable<MathSet<T>>
{
    public override int GetHashCode() => this.Select(elt => elt.GetHashCode()).Sum().GetHashCode();

    public bool Equals(MathSet<T> obj) => SetEquals(obj);

    public override bool Equals(object obj) => Equals(obj as MathSet<T>);

    public static bool operator ==(MathSet<T> a, MathSet<T> b) =>
        ReferenceEquals(a, null) ? ReferenceEquals(b, null) : a.Equals(b);

    public static bool operator !=(MathSet<T> a, MathSet<T> b) => !(a == b);
}
var a = new MathSet<int> { 1, 2, 3 };
var b = new MathSet<int> { 3, 2, 1 };

var c = a.Equals(b);                        // true

var d = new MathSet<MathSet<int>> { a, b }; // contains one element

var e = a == b;                             // true