c# - 如何覆盖 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)' 必须声明一个主体,因为它没有标记为抽象、外部或部分
我想我可以用扩展方法解决这个问题,但我不确定
解决方案
运算符重载显式仅适用于用户定义的类型。它实际上是第一句话。但是,您可以创建一个继承自的类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 型对此根本不重要。我实际上不确定这在那里是否有效。
推荐阅读
- php - 文件名在 Web 服务器上的解释与在 Localhost 上的解释不同
- amazon-web-services - AWS ALB 使用 TLS 转发到 Lambda
- python-3.x - 如何将 dateTime 字符串转换为 dateTime
- python - 用bs4刮台
- docker - 如何在shell脚本中将命令的输出传递给另一个
- adobe - Adobe AEM Querybuilder 调试器 - 多路径和多节点名
- excel - 识别连续值的 Excel 函数
- r - 创建一个添加 N 行采样函数的 data.frame
- python - 如何将 matplotlib.pyplot.contour 转换为 RGBA 列表或数组?
- qemu - QEMU 可以捕获对 Cortex-M 处理器上不存在的 RAM 的访问吗?