关于异常的问题已有很多问题,但我找不到能回答我问题的问题.如果我错过了,请随意指出另一个问题的方向.
我的问题很简单:其他(C#)开发人员如何选择最合适的异常类型?之前我写过以下代码:
if (Enum.IsDefined(enumType, value))
{
return (T)Enum.Parse(enumType, value);
}
else
{
throw new ArgumentException(string.Format("Parameter for value \"{0}\" is not defined in {1}", value, enumType));
}
Run Code Online (Sandbox Code Playgroud)
我已经意识到,InvalidEnumArgumentException如果我当时知道它的存在,抛出一个可能会更合适.
是否有可用的权威资源帮助开发人员选择异常类型,还是仅仅是经验问题?
我已经向Noldorin提出了一些观点,他们在一个经过深思熟虑的答案中提供了一系列的想法.这些要点可能真的让你们中的任何一个 - 感谢所有的建议.
Pet*_*der 12
Krzysztof Cwalina在这篇章节"1.1.1选择正确的异常类型"中有一篇好文章
PS考虑订阅他的博客.好读!
回答你的问题:InvalidEnumArgumentException,
因为抛出最有意义(最派生的)异常是有意义的.
和捕获ArgumentException的调用者也捕获InvalidEnumArgumentException ...
我会说这只是体验.我经常发现新的异常,而且我已经在.NET的许多方面工作了一段时间了!无论如何,你想要这个消息来源告诉你什么?选择适当的异常类型似乎是高度特定于上下文的,所以我对它可以提供的建议水平表示怀疑.列出更常见的那些将是它可以提供的最多.异常类型的名称和Intellisense描述通常很清楚地解释了它们的使用场景.
我的建议很简单,就是熟悉所有基本的人的(特别是那些System,System.IO和你经常使用的任何其他命名空间),并学习别人沿途.我发现我通常只使用一小部分就可以逃脱.如果您在BCL中已经存在更具体的异常时意外使用了更通用的异常类型,那么它就不是很大的罪行,并且可以在以后轻松更改.说实话,对于任何特别具体的错误,您通常需要创建自己继承的类Exception.
希望有所帮助.
编辑:如果您需要一个非常常见的简要指南,请参阅MSDN上的Common Exception Classes页面.