有没有一种方法可以使用List <T>,method(T)作为参数来制作扩展方法?

时间:2019-06-07 19:23:00

标签: c# generics methods system.reactive generic-list

我需要制作一个扩展方法,该扩展方法以List<>(因为它是扩展名)作为参数,而将任何类型的List<T>作为this作为第一个参数,与列表(Method(T some_parameter))类型相同的第二个参数。在此方法的内部,我需要对List<T>中的每个项目进行一些操作。

我不能很好地理解delegateDelegate是否无法理解。我尝试使用delegatesDelegates,Lambda表达式,但是什么也没有...

  static void Main(string[] args)
  {
       List<item> lisd = new List<item>();
       list.CallForEach((List <item> _list) => EXTENDER.Method(_list));
  }

  public static class EXTENDER
  {

       public static void Method<T>(List<T> list)
       {
            //some code 
       }

       public static void CallForEach<T>(this List<T> list, Action<T> action)
       {
            foreach(var item in list)
            {
                 action(item);
            }
       }
  } 

我需要完全使用“操作”吗? 如果有人对类似方法有所了解,请给我发送参考。

1 个答案:

答案 0 :(得分:0)

出于学术目的

给出

public static class Extension
{
   public static void MethodEx<T>(this T item)
   {
      Console.WriteLine(item);
   }

   public static void CallForEach<T>(this List<T> list, Action<T> action)
   {
      foreach (var item in list)
         action(item);
   }
}

用法

public static void Method<T>(T item)
{
   Console.WriteLine(item);
}

static void Main(string[] args)
{
   var list = new List<int>()
                 {
                    1,
                    2,
                    3,
                    4,
                    5,
                    6
                 };

   list.CallForEach(x => x.MethodEx());

   // or you could use a method group
   list.CallForEach(Extension.MethodEx);

   //or if its not in your extension class
   list.CallForEach(Method);


   // ForEach is already part of the List class
   list.ForEach(x => x.MethodEx());
   list.ForEach(Extension.MethodEx);
   list.ForEach(Method);

}

输出所有示例

1
2
3
4
5
6