目前,我在一个我称之为“确保”的类中使用这段代码,它本质上是一个简化抛出异常的静态方法的快捷类,因此我不必经常写出至少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);

07-24 22:17