是否可以使用List <t>进行运算符重载而不继承它?

时间:2018-12-27 11:50:22

标签: c# .net

C# operator overloading with List<T>

Why not inherit from 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类。)

1 个答案:

答案 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;
         }       
     }