-2

使用 List<T> 进行 C# 运算符重载

为什么不从 List<T> 继承?

基于第一个问题,我通过继承它实现了运算符重载到我的列表之一。

今天我偶然发现了第二个链接。所以我的问题是“是否可以使用 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 类。)

4

1 回答 1

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;
         }       
     }
于 2018-12-27T12:25:09.503 回答