如何在 C# 中覆盖 HashSet<T> 的 + 运算符

how can override + operator for HashSet<T> in c#

我们可以覆盖现有 class 的任何操作(例如:'+')吗? 我想要合并 2 HashSet 的覆盖 + 操作并删除重复值。

在这种情况下,我想覆盖 HashSet 的 + 操作,但我不知道如何为现有的 class 实现 + 运算符。 互联网上的所有教程都为新 class 实现了运算符。给定泛型的SetHash,如何进行+运算?

我创建了一个 class 来实现 + 运算符:

    public static HashSet<T> operator +(HashSet<T> left, HashSet<T> right)  where T : class
    {
        return left.Union(right);
    } 

但不工作并给出很多错误(23 个错误)。其中一些是:

.operator +(HashSet, HashSet)' must declare a body because it is not marked abstract, extern, or partial

我想我可以用扩展方法解决这个问题,但我不确定

运算符重载显式仅适用于用户定义的类型。它实际上是1st sentence。但是,您可以创建一个继承自 HastSet<T> 的 class - 毕竟它不是密封的。唯一的目的是添加 function/override.

public class AddAbleHashSet<T> : HashSet<T> {
    public static HashSet<T> operator +(HashSet<T> left, HashSet<T> right)  where T : class
    {
        return left.Union(right);
    } 
}

P.S.: 我不确定函数的 where T : class 限制在做什么。您正在合并两个哈希集。类型 T 对此根本不重要。我实际上不确定那在那里是否有效。