首页 > 解决方案 > 如何覆盖 HashSet 的 + 运算符在c#中

问题描述

我们可以覆盖现有类的任何操作(例如:'+')?我想要覆盖 + 操作以合并 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)' 必须声明一个主体,因为它没有标记为抽象、外部或部分

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

标签: c#operator-overloadinghashset

解决方案


运算符重载显式仅适用于用户定义的类型。它实际上是第一句话。但是,您可以创建一个继承自的类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);
    } 
}

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


推荐阅读