Udgin

Linq extensions

Apr 25th, 2013
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.83 KB | None | 0 0
  1.         public static class Linq
  2.     {
  3.         public static IEnumerable<T> Except<T>(this IEnumerable<T> source, IEnumerable<T> target, Func<T, T, bool> func)
  4.         {
  5.             return source.Except(target, new LambdaComparer<T>(func));
  6.         }
  7.  
  8.         public static TResult With<TInput, TResult>(this TInput o, Func<TInput, TResult> evaluator)
  9.             where TInput : class
  10.         {
  11.             if (o == null) return default(TResult);
  12.             return evaluator(o);
  13.         }
  14.  
  15.         public static TResult Return<TInput, TResult>(this TInput o, Func<TInput, TResult> evaluator, TResult failure_value) where TInput : class
  16.         {
  17.             if (o == null) return failure_value;
  18.             return evaluator(o);
  19.         }
  20.  
  21.         public static bool Check<TInput>(this TInput o, Func<TInput, bool> evaluator) where TInput : class
  22.         {
  23.             if (o == null) return false;
  24.             return evaluator(o);
  25.         }
  26.  
  27.         public static TInput If<TInput>(this TInput o, Func<TInput, bool> evaluator) where TInput : class
  28.         {
  29.             if (o == null) return null;
  30.             return evaluator(o) ? o : null;
  31.         }
  32.  
  33.         public static TInput Unless<TInput>(this TInput o, Func<TInput, bool> evaluator) where TInput : class
  34.         {
  35.             if (o == null) return null;
  36.             return evaluator(o) ? null : o;
  37.         }
  38.  
  39.         public static TInput Do<TInput>(this TInput o, Action<TInput> action) where TInput : class
  40.         {
  41.             if (o == null) return null;
  42.             action(o);
  43.             return o;
  44.         }
  45.  
  46.         public static List<TInput> Delete<TInput>(this List<TInput> o, Func<TInput, bool> evaluator) where TInput : class
  47.         {
  48.             var listToDelete = o.Where(evaluator).ToList();
  49.             foreach (var input in listToDelete)
  50.             {
  51.                 o.Remove(input);
  52.             }
  53.             return o;
  54.         }
  55.     }
  56. public class LambdaComparer<T> : IEqualityComparer<T>
  57.     {
  58.         private readonly Func<T, T, bool> _lambdaComparer;
  59.         private readonly Func<T, int> _lambdaHash;
  60.  
  61.         public LambdaComparer(Func<T, T, bool> lambdaComparer) :
  62.             this(lambdaComparer, o => 0)
  63.         {
  64.         }
  65.  
  66.         public LambdaComparer(Func<T, T, bool> lambdaComparer, Func<T, int> lambdaHash)
  67.         {
  68.             if (lambdaComparer == null)
  69.                 throw new ArgumentNullException("lambdaComparer");
  70.             if (lambdaHash == null)
  71.                 throw new ArgumentNullException("lambdaHash");
  72.  
  73.             _lambdaComparer = lambdaComparer;
  74.             _lambdaHash = lambdaHash;
  75.         }
  76.  
  77.         public bool Equals(T x, T y)
  78.         {
  79.             return _lambdaComparer(x, y);
  80.         }
  81.  
  82.         public int GetHashCode(T obj)
  83.         {
  84.             return _lambdaHash(obj);
  85.         }
  86.     }
Advertisement
Add Comment
Please, Sign In to add comment