Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*тз:
- Для интерфейса IEnumerable<T> реализовать расширающие функции Cast,
- Where, Select, SelectMany, All, Any, First, FirstOrDefault, Intersect, Skip, Take,
- функционал которых повторяет функционал функций в LINQ(без перегрузок,
- достаточно одного варианта), используя стандартные делегаты.
- Продемонстировать работу со всеми функциями.*/
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace lab0_6
- {
- public static class MyExtensions
- {
- public static bool All<T>(this IEnumerable<T> source, Func<T, bool> f)
- {
- foreach (var el in source) if (!f(el)) return false;
- return true;
- }
- public static bool Any<T>(this IEnumerable<T> source, Func<T, bool> f)
- {
- foreach (var el in source) if (f(el)) return true;
- return false;
- }
- public static IEnumerable<T> Cast<T>(this IEnumerable<T> source)
- {
- foreach (var el in source) yield return (T)el;
- }
- public static T First<T>(this IEnumerable<T> source, Func<T, bool> f)
- {
- foreach (var el in source) if (f(el)) return el;
- throw new InvalidOperationException("В данной коллекции нет элемента , удовлетворяющего заданному условию");
- }
- public static T FirstOrDefault<T>(this IEnumerable<T> source, Func<T, bool> f)
- {
- foreach (var el in source) if (f(el)) return el;
- return default(T);
- }
- public static IEnumerable<S> SelectMany<T, S>(this IEnumerable<T> source, Func<T, IEnumerable<S>> selector)
- {
- foreach (var el in source) foreach (var n in selector(el)) yield return n;
- }
- public static IEnumerable<S> Select<T, S>(this IEnumerable<T> source, Func<T, S> selector)
- {
- foreach (var el in source) yield return selector(el);
- }
- public static int Count<T>(this IEnumerable<T> source)
- {
- var i = default(int);
- foreach (var el in source) i++;
- return i;
- }
- public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource> source, int count)
- {
- if (count > source.Count()) foreach (var el in source) yield return el;
- else
- {
- var i = default(int);
- foreach (var el in source) if (i++ < count) yield return el;
- }
- }
- public static IEnumerable<TSource> Skip<TSource>(this IEnumerable<TSource> source, int count)
- {
- if (count > source.Count()) foreach (var el in source) yield return el;
- else
- {
- var i = default(int);
- foreach (var el in source) if (i++ >= count) yield return el;
- }
- }
- public static IEnumerable<T> Where<T>(this IEnumerable<T> source, Func<T, bool> f)
- {
- foreach (var el in source) if (f(el)) yield return el;
- }
- public static IEnumerable<T> Intersect<T>(this IEnumerable<T> first,IEnumerable<T> second)
- {
- foreach (var n in first) foreach (var m in second) if (n.Equals(m)) yield return n;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement