2

示例代码:

  public class ElementList
  {
        // some code...

        public ElementList (Element owner)
        {
              // some code...
        }

        public void Add (Element e)
        {
              if (e == owner) // cannot add child which will be self-parent
              {
                    throw new SomeException (); // main problem here
              }

              childList.Add (e);
        }
  }

现在我应该抛出什么样的异常?如果您建议自定义异常,请告诉我一个好名字。

4

3 回答 3

1

这看起来像是ArgumentException的工作。最好将它子类化并创建自己的 - 像 ParentElementArgumentException 这样的名称将是一个足够清晰的名称 - 这样您就可以测试这个特定条件以及一般的 arg 异常(比如有人传入元素以外的东西)。

于 2013-01-03T03:52:50.280 回答
1

我建议ArgumentException,因为异常将由您的论点引起e

if (e == owner) // cannot add child which will be self-parent
{
    throw new ArgumentException(/* Include more exception details here */);
}
于 2013-01-03T03:52:53.150 回答
1

简而言之: ArgumentException会成功的。但是,抛出可以在代码中轻松管理的异常并不是一个好习惯。

我建议重写您的代码,例如:

public void Add (Element e)
        {
              if (e != owner)
              {
                  // Not the owner, do your operation
                   childList.Add (e);
              }
              else {
                    // Log error message or display warning to user
                 }              
        }

但是,如果您想继续处理异常情况,则代码可能如下所示:

if (e == owner) // cannot add child which will be self-parent
{
    throw new ArgumentException("Can not add child which will be self-parent");
}

编辑:作为参考,您当然可以使用MSDN 文章 进行详细了解。

于 2013-01-03T03:54:19.963 回答