I ran into the code below today, and my gut instinct tells me this is an expensive way to do a null check. The point the author was making was that if you changed the name of the object then you don't need to change the value of the string being thrown in the exception.
The proposed use would be:
string cantBeNull=...;
Guard.IsNotNull(cantBeNull);
//instead of
if(cantBeNull == null) throw new ArgumentNullException("cantBeNull");
So Is this an acceptable way of checking for null? Is this overly expensive just to save you from not having the change the value passed to the exception?
Code in question:
public static void IsNotNull<T>(Expression<Func<T>> expression) where T : class
{
if (expression == null)
throw new ArgumentNullException("expression");
var value = expression.Compile()();
var param = (MemberExpression)expression.Body;
var paramName = param.Member.Name;
if (value != null)
return;
throw new ArgumentNullException(paramName);
}
null
check. Yes, overly expensive. \$\endgroup\$cantBeNull.IsNotNull()
:) \$\endgroup\$