document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. using System;
  2. using System.Linq;
  3. using System.Linq.Expressions;
  4.  
  5. namespace IntroToExpressions
  6. {
  7.     public static class Validate
  8.     {
  9.         public static void IsNotNull<T>(Expression<Func<T>> expr)
  10.         {
  11.             MemberExpression memExpr = getMemberExpression(expr);
  12.  
  13.             var value = extractMemberValue(memExpr);
  14.  
  15.             if (value != null)
  16.                 return;
  17.  
  18.             throw new ArgumentNullException(memExpr.Member.Name);
  19.         }
  20.  
  21.         private static MemberExpression getMemberExpression<T>(Expression<Func<T>> expr)
  22.         {
  23.             var visitor = new CustomExpressionVisitor();
  24.             visitor.Visit(expr);
  25.             MemberExpression memExpr = visitor.Expressions.Last().Value as MemberExpression;
  26.  
  27.             if (memExpr == null)
  28.                 throw new ArgumentException("Expected a MemberExpression");
  29.  
  30.             return memExpr;
  31.         }
  32.  
  33.         private static object extractMemberValue(MemberExpression memExpr)
  34.         {
  35.             var func = Expression.Lambda(memExpr).Compile();
  36.             var value = func.DynamicInvoke();
  37.             return value;
  38.         }
  39.  
  40.         [Obsolete("Use the overload which accepts an Expression")]
  41.         public static void IsNotNull(object o, string parameterName)
  42.         {
  43.             if (o != null)
  44.                 return;
  45.  
  46.             throw new ArgumentNullException(parameterName);
  47.         }
  48.     }
  49. }
');