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

时间:2019-12-17 09:35:35

标签: c# operator-overloading hashset

我们可以覆盖现有类的任何操作(例如:“ +”)吗? 我想对合并2 HashSet进行覆盖+操作,并删除重复的值。

在这种情况下,我想对HashSet进行重写+操作,但是我不知道如何为现有类实现+运算符。 互联网上的所有教程都为新课程实施了操作员。给定SetHash的通用类型,我该如何执行+操作?

我创建了一个实现+运算符的类:

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

但不起作用,并给出许多错误(23个错误)。其中一些是:

  

.operator +(HashSet,HashSet)'必须声明一个主体,因为它没有被标记为抽象,外部或局部

我认为我可以使用扩展方法解决此问题,但是我不确定

1 个答案:

答案 0 :(得分:1)

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

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型根本不匹配。我实际上不确定在那里是否有效。