C#重载泛型+运算符

时间:2016-03-30 11:47:59

标签: c# generics operator-overloading

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

目标使用代码I尝试实现:

List<int> numbers = new List<int>();
numbers += 10;

我尝试了什么。 &#34;运营商+&#34;应该重载+和&#34;这个IList&#34;应扩展通用IList。

public static IList<T> operator +<T>(this IList<T> list, T element)
{
    list.Add(element);
    return list;
}
然而,它并没有起作用,在2012年的视觉工作室中,红色突显了它。 我究竟做错了什么?这不可能吗?为什么这可以用于标准类而不是泛型类?

1 个答案:

答案 0 :(得分:4)

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

此外,至少有一个参数必须与类相同。

所以你能做的最好就是:

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

然后您可以使用:

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

list += 3;

Console.WriteLine(string.Join(", ", list)); // Will print 1, 2, 3