需要帮助才能走出异常丛林



我已经在谷歌上搜索了一段时间,但我仍然不知道在哪种情况下使用哪个例外。我读到在您自己的代码中提出SystemExceptions是一种不好的做法,因为这些异常最好由 CLR 引发。

但是,现在我想知道在不同情况下我应该提出什么Exeption。假设我有一个方法,它被调用一个枚举作为参数。这不是一个很好的例子 - 它只是从我的头顶上下来的。

public enum CommandAppearance
{
    Button,
    Menu,
    NotSpecified
}
//...
public void PlaceButtons(CommandAppearance commandAppearance)
{
    switch(commandAppearance)
    {
        case CommandAppearance.Button:
            // do the placing
        case CommandAppearance.Menu:
            // do the placing
        case CommandAppearance.NotSpecified:
            throw ArgumentOutOfRangeException("The button must have a defined appearance!")
    }
}

这里会是什么?是否有某种网站,我可以在其中获得概述?是否有任何模式可以告诉您要引发哪种异常?我只需要一些关于这个主题的提示,因为我对此很不自信。

我认为只养new Exception()也不是好的做法,是吗?

我敢肯定ArgumentOutOfRangeException是最好的内置例外。ReSharper也建议这样做。
如果你需要另一个..那么唯一的方法是创建新的特殊例外CommandAppearanceIsNotSpecifiedException

对于您的示例场景,我建议:

  • ArgumentOutOfRangeException该方法是否支持枚举中的所有值,并且传递了无效值。
  • NotSupportedException该方法是否支持枚举中的值子集。

一般来说,您希望使用异常类型 尽可能在 .net 框架中查看此异常列表,这是有意义的,否则您需要引入自己的异常。这可能涉及为应用程序添加通用应用程序异常,并添加从它继承的更具体的异常。

例如

public class MyAppException : Exception
{
    // This would be used if none of the .net exceptions are appropriate and it is a 
    // generic application error which can't be handled differently to any other 
    // application error.
}
public class CustomerStatusInvalidException : MyAppException
{
    // This would be thrown if the customer status is invalid, it allows the calling
    // code to catch this exception specifically and handle it differently to other 
    // exceptions, alternatively it would also be caught by (catch MyAppException) if 
    // there is no (catch CustomerStatusInvalidException).
}

相关内容

  • 没有找到相关文章

最新更新