目前我正在使用一个名为"Ensure"的类中的代码,它本质上是一个静态方法的快捷方式,我用它来更容易地抛出异常,这样我就不必经常写出至少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);
我需要名字来解释异常本身中哪个参数引起了异常。
有没有一种方法可以在不需要lambda表达式的()=>
部分的情况下调用ArgumentNotNull
,只需调用Ensure.ArgumentNotNull(arg)
就能获取传递的参数的名称,而无需特别传递名称。
nameof
表达式了。 - InBetweenFody
来进行 AOP,以在构建时添加 Ensure。或者,你可以考虑使用代码合同和静态代码分析来“证明”参数永远不会为 null。 - Aron