获取变量的原始nameof(...)?

时间:2019-03-22 13:33:28

标签: c#

我有这个

public static class Parameters
{
    public static void Required<T>(this T parameter, string paramName) where T : class
    {
        if (parameter == null)
        {
            throw new ArgumentNullException(paramName);
        }

        // ...
    }
}

我像这样使用它

Parameters.Required(settings, nameof(settings));

是否可以从Required方法中删除第二个参数并以某种方式获得原始参数名称?不,对吧?

1 个答案:

答案 0 :(得分:2)

您可以使Requred函数接受一个表达式。从表达式中可以读出成员名称的名称。描述为here

    public static void Required<T>(Expression<Func<T>> parameter) where T : class
    {
        if (parameter.Compile().Invoke() == null)
        {
            var caller = ((MemberExpression)parameter.Body).Member.Name;
            throw new ArgumentNullException(caller);
        }

        // ...
    }

并这样称呼它:

Parameters.Required(() => settings);