Есть ли способ сделать extension-метод с List <T>, method (T) в качестве параметров? - PullRequest
0 голосов
/ 07 июня 2019

Мне нужно создать метод расширения, который принимает List<> любого типа (List<T>) в качестве первого параметра с this (потому что это расширение) и метод, который принимает параметр с тем же типом, что и список ( Method(T some_parameter)) в качестве второго параметра. Внутри этого метода мне нужно сделать несколько манипуляций с каждым предметом в List<T>.

Я не очень хорошо понимаю, если delegate и Delegate, просто не могу понять. Я пытался использовать delegates, Delegates, лямбда-выражения, но ничего ...

  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 голосов
/ 08 июня 2019

Для академических целей

С учетом

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
...