我们可以覆盖现有类的任何操作(例如:“ +”)吗? 我想对合并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)'必须声明一个主体,因为它没有被标记为抽象,外部或局部
我认为我可以使用扩展方法解决此问题,但是我不确定
答案 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型根本不匹配。我实际上不确定在那里是否有效。