.NET 4.x Создание расширенных методов для любой коллекции, делегаты - C#

Узнай цену своей работы

Формулировка задачи:

Нужна скорая помощь!) У меня вот такой класс:
Листинг программы
  1. using System;
  2. using System.Text;
  3. namespace ConsoleApplication1
  4. {
  5. public static class Functions
  6. {
  7. public static bool IsEven(int a)
  8. {
  9. return a % 2 == 0;
  10. }
  11. public static bool IsOdd(int a)
  12. {
  13. return a % 2 != 0;
  14. }
  15. public static int max(this int[] arr, del dl = null)
  16. {
  17. int max=arr[0];
  18. if (dl != null)
  19. {
  20. foreach (int item in arr)
  21. if (dl(item))
  22. if (!dl(max) || max < item)
  23. max = item;
  24. if (!dl(max))
  25. throw new Exception("No specified type of elements");
  26. }
  27. else
  28. foreach (int item in arr)
  29. if (max < item)
  30. max = item;
  31. return max;
  32. }
  33. }
  34. }
и такая программа:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace ConsoleApplication1
  5. {
  6. public delegate bool del(int a);
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. del IsEven = Functions.IsEven;
  12. del IsOdd = Functions.IsOdd;
  13. int[] a = new int[]{32492435,431,534,623,44,999};
  14. Console.WriteLine(a.max());
  15. Console.WriteLine(a.max(IsEven));
  16. Console.WriteLine(a.max(IsOdd));
  17. }
  18. }
  19. }
Расширенный метод max работает с массивами типа int, а нужно, чтобы он работал со всеми коллекциями(IEnumerable). С перегрузками получается, но код длинный, подскажите короткий вариант этой функции) И нужна функция T Select(bool condition, T item), которая возвращает коллекцию тех элементов из заданной коллекции, которые соответствуют условию. P.S. я преднамеренно удалила System.Linq, нам задали писать свои функции : D

Решение задачи: «.NET 4.x Создание расширенных методов для любой коллекции, делегаты»

textual
Листинг программы
  1.  public static class Functions
  2.     {
  3.  
  4.         public static T Max<T>(this IEnumerable<T> source, IComparer<T> comparer = null)
  5.         {
  6.             if (source == null)
  7.                 throw new ArgumentNullException("source");
  8.             comparer = comparer ?? Comparer<T>.Default;
  9.             return Max(source, comparer.Compare);
  10.         }
  11.  
  12.         public static T Max<T>(this IEnumerable<T> source, Comparison<T>  cmp)
  13.         {
  14.             if (source == null)
  15.                 throw new ArgumentNullException("source");
  16.             if(cmp == null)
  17.                 throw new ArgumentNullException("cmp");
  18.             T max = default(T);
  19.             if (max == null)
  20.             {
  21.                 foreach (T s in source)
  22.                     if ((s != null) && ((max == null) || (cmp(s, max) > 0)))
  23.                         max = s;
  24.                 return max;
  25.             }
  26.             bool flag = false;
  27.             foreach (T s in source)
  28.             {
  29.                 if (flag)
  30.                 {
  31.                     if (cmp(s, max) > 0)
  32.                         max = s;
  33.                 }
  34.                 else
  35.                 {
  36.                     max = s;
  37.                     flag = true;
  38.                 }
  39.             }
  40.             if (!flag)
  41.             {
  42.                 throw new Exception("No Elements");
  43.             }
  44.             return max;
  45.         }
  46.  
  47.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы