C# 重载泛型 + 运算符

Jos*_*hua 0 c# generics operator-overloading

我试图通过在列表中添加一个项目来添加一个列表。

我试图实现的代码的目标使用:

List<int> numbers = new List<int>();
numbers += 10;
Run Code Online (Sandbox Code Playgroud)

我尝试过的。“operator +”应该重载 +,“this IList”应该扩展通用 IList。

public static IList<T> operator +<T>(this IList<T> list, T element)
{
    list.Add(element);
    return list;
}
Run Code Online (Sandbox Code Playgroud)

然而它不起作用,在 Visual Studio 2012 中到处都是红色下划线。我做错了什么?这不可能吗?为什么这适用于标准类但不适用于通用类?

Kev*_*sse 5

运算符只能在类的定义中重载。您无法使用扩展方法从外部覆盖它们。

此外,至少其中一个参数必须与类具有相同的类型。

所以你能做的最好的事情就是:

public class CustomList<T> : List<T>
{
    public static CustomList<T> operator +(CustomList<T> list, T element)
    {
        list.Add(element);
        return list;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样使用:

var list = new CustomList<int> { 1, 2 };

list += 3;

Console.WriteLine(string.Join(", ", list)); // Will print 1, 2, 3
Run Code Online (Sandbox Code Playgroud)