C# operator overloading with List<T>
基于第一个问题,我实现了运算符重载,方法是从列表中继承操作符。
今天,我偶然发现了第二个链接。所以我的问题是“是否可以在不继承List的情况下对List进行运算符重载?”
//复制第一个问题的内容
我正在尝试在适用的C#中重载运算符(不要问为什么!) 到列表。例如,我希望能够写:
List<string> x = // some list of things List<string> y = // some list of things List<string> z = x + y
,因此“ z”包含“ x”的所有内容,后跟内容 的“ y”。我知道已经有合并两个列表的方法, 我只是想了解运算符重载如何与 通用结构。
(顺便说一下,这是来自Systems.Collections.Generic的List类。)
答案 0 :(得分:1)
您不能在类外进行运算符重载。您可以使用容器进行操作符重载
您可以在此处运行此代码url
using System;
using System.Collections;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
Run();
}
public static void Run()
{
var ls = new List<int>(){
1,3,5,7,9,11
};
var ls2 = new List<int>(){
2,4,6,8,10
};
var lsContainer = new AdditionContainer<List<int>,int>(ls);
var ls2Container = new AdditionContainer<List<int>,int>(ls2);
var finalAnsower = lsContainer +ls2Container;
finalAnsower.List.ForEach(f=>Console.WriteLine(f) );
}
}
public class AdditionContainer<TList,T>
where TList:List<T>
{
public TList List;
public AdditionContainer(TList list )
{
List=list;
}
public static AdditionContainer<TList,T> operator +(AdditionContainer<TList,T> a, AdditionContainer<TList,T> b)
{
b.List.ForEach(l =>{
if(!a.List.Contains(l))
{
a.List.Add(l);
}
});
return a;
}
}