Advertisement
mrAnderson33

шестая лаба си шарп

Apr 18th, 2017
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.47 KB | None | 0 0
  1. /*тз:
  2. Для интерфейса IEnumerable<T> реализовать расширающие функции Cast,
  3. Where, Select, SelectMany, All, Any, First, FirstOrDefault, Intersect, Skip, Take,
  4. функционал которых повторяет функционал функций в LINQ(без перегрузок,
  5. достаточно одного варианта), используя стандартные делегаты.
  6. Продемонстировать работу со всеми функциями.*/
  7.  
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Text;
  11.  
  12. namespace lab0_6
  13. {
  14.     public static class MyExtensions
  15.     {
  16.         public static bool All<T>(this IEnumerable<T> source, Func<T, bool> f)
  17.         {
  18.             foreach (var el in source) if (!f(el)) return false;
  19.             return true;
  20.         }
  21.         public static bool Any<T>(this IEnumerable<T> source, Func<T, bool> f)
  22.         {
  23.             foreach (var el in source) if (f(el)) return true;
  24.             return false;
  25.         }
  26.         public static IEnumerable<T> Cast<T>(this IEnumerable<T> source)
  27.         {
  28.             foreach (var el in source) yield return (T)el;
  29.         }
  30.         public static T First<T>(this IEnumerable<T> source, Func<T, bool> f)
  31.         {
  32.             foreach (var el in source) if (f(el)) return el;
  33.             throw new InvalidOperationException("В данной коллекции нет элемента , удовлетворяющего заданному условию");
  34.         }
  35.         public static T FirstOrDefault<T>(this IEnumerable<T> source, Func<T, bool> f)
  36.         {
  37.             foreach (var el in source) if (f(el)) return el;
  38.             return default(T);
  39.  
  40.         }
  41.  
  42.         public static IEnumerable<S> SelectMany<T, S>(this IEnumerable<T> source, Func<T, IEnumerable<S>> selector)
  43.         {
  44.             foreach (var el in source) foreach (var n in selector(el)) yield return n;
  45.         }
  46.  
  47.         public static IEnumerable<S> Select<T, S>(this IEnumerable<T> source, Func<T, S> selector)
  48.         {
  49.             foreach (var el in source) yield return selector(el);
  50.         }
  51.         public static int Count<T>(this IEnumerable<T> source)
  52.         {
  53.             var i = default(int);
  54.             foreach (var el in source) i++;
  55.             return i;
  56.         }
  57.         public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource> source, int count)
  58.         {
  59.             if (count > source.Count()) foreach (var el in source) yield return el;
  60.             else
  61.             {  
  62.                 var i = default(int);
  63.                 foreach (var el in source) if (i++ < count) yield return el;
  64.             }
  65.         }
  66.  
  67.         public static IEnumerable<TSource> Skip<TSource>(this IEnumerable<TSource> source, int count)
  68.         {
  69.             if (count > source.Count()) foreach (var el in source) yield return el;
  70.             else
  71.             {
  72.                 var i = default(int);
  73.                 foreach (var el in source) if (i++ >= count) yield return el;
  74.             }
  75.         }
  76.         public static IEnumerable<T> Where<T>(this IEnumerable<T> source, Func<T, bool> f)
  77.         {
  78.             foreach (var el in source) if (f(el)) yield return el;
  79.         }
  80.  
  81.         public static IEnumerable<T> Intersect<T>(this IEnumerable<T> first,IEnumerable<T> second)
  82.         {
  83.             foreach (var n in first) foreach (var m in second) if (n.Equals(m)) yield return n;
  84.         }
  85.  
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement