首页 > 解决方案 > 有没有办法用 List 制作扩展方法,方法(T)作为参数?

问题描述

我需要制作一个将List<>任何类型(List<T>)作为第一个参数this的扩展方法(因为它是一个扩展)和一个将与列表(Method(T some_parameter))类型相同的参数作为第二个参数的方法。在这个方法中,我需要对List<T>.

我不太了解 ifdelegateDelegate,只是无法理解。我尝试使用delegates, Delegates, 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);
            }
       }
  } 

我需要完全使用“动作”吗?如果有人知道类似方法的信息,请给我发送参考资料...

标签: c#genericsmethodssystem.reactivegeneric-list

解决方案


出于学术目的

给定

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

推荐阅读