目前,我在一个我称之为“确保”的类中使用这段代码,它本质上是一个简化抛出异常的静态方法的快捷类,因此我不必经常写出至少3行代码来执行异常,它总是可以在1行代码上完成。
[DebuggerHidden, DebuggerStepThrough]
public static void ArgumentNotNull(object argument, string name)
{
if (argument == null)
{
throw new ArgumentNullException(name, "Cannot be null");
}
}
[DebuggerHidden, DebuggerStepThrough]
public static void ArgumentNotNull<T>(Expression<Func<T>> expr)
{
var e = (MemberExpression)expr.Body;
var val = GetValue<T>(e);
ArgumentNotNull(val, e.Member.Name);
}
我的问题是,目前在致电
Ensure.ArgumentNotNull
时,我必须:Ensure.ArgumentNotNull(arg, "arg");
或
Ensure.ArgumentNotNull(() => arg);
因为我需要这个名称来解释是哪个参数导致了异常中的异常。
有没有一种方法可以调用
ArgumentNotNull
而不需要lambda的() =>
部分,只需调用Ensure.ArgumentNotNull(arg)
就可以获得传递的参数的名称,而不必专门传递名称。 最佳答案
有没有一种方法可以调用ArgumentNotNull
而不需要lambda的() =>
部分,只需调用Ensure.ArgumentNotNull(arg)
就可以得到传递的参数的名称
我对此表示怀疑,因为值没有元数据来确定它是传入的参数、变量还是文本。该值并不总是一个参数-没有什么可以阻止您调用Ensure.ArgumentNotNull(null);
。