代码之家  ›  专栏  ›  技术社区  ›  Oleg Sakharov

如何在构造ArgumentException时以编程方式确定参数名?

  •  3
  • Oleg Sakharov  · 技术社区  · 18 年前

    在构造ArgumentException时,两个重载接受一个字符串,该字符串是无效参数的参数名。我想,如果不记得在每次更改方法的参数名时都更新这个ctor参数,那就太好了。有没有一个简单的方法可以通过反射来做到这一点?

    更新: 感谢迄今为止的两位受访者。你们两个都回答得很好,但解决方案仍然让我头痛。(好吧,A 微小的 头痛,但还是……)解释一下,如果我 重新排序 稍后的参数——或者删除之前的参数——我必须记住再次更改我的异常构造代码。有什么方法可以用在

    Object.ReferenceEquals(myParam, <insert code here>)
    

    确定要处理相关参数吗?这样,编译器就会介入以防止我错误地构造异常。

    这就是说,我开始怀疑最初问题的“简单”部分不会那么快出现。也许我应该容忍使用字符串文字。:)

    2 回复  |  直到 18 年前
        1
  •  2
  •   to StackOverflow    18 年前

        2
  •  2
  •   Community Mohan Dere    9 年前

    public void Resize(int newSize)
    {
      if (newSize < 1)
      {
        throw new ArgumentException("Blah", NameOfVariable(() => newSize));
      }
      // ... whatever ...
    }
    

    public static string NameOfVariable(Expression<Func<object>> expressionTree)
    {
       var expression = (UnaryExpression)expressionTree.Body;
       var memberExpression = (MemberExpression)expression.Operand;
       return memberExpression.Member.Name;
    }
    

    Joe

    推荐文章