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 中到处都是红色下划线。我做错了什么?这不可能吗?为什么这适用于标准类但不适用于通用类?
运算符只能在类的定义中重载。您无法使用扩展方法从外部覆盖它们。
此外,至少其中一个参数必须与类具有相同的类型。
所以你能做的最好的事情就是:
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)
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |