我正在编写一个应用程序,我想根据用户提供的路径加载一个文件。我检查文件的扩展名,当扩展名不匹配时,我想抛出一个异常。
我可以扔一个IOException。但是,我想可能会有一个更详细的例外。因此,我查看了MSDN并找到了FileLoadException。这个名字表明我的错误属于这个范畴,但是.当我查看MSDN时,它说:“表示在找到程序集文件但无法加载时发生的错误。”以及“在找到托管程序集但无法加载时引发的异常”。我的错误绝对不是这样。
那么问题是什么呢?嗯,我想知道文档实际上是否意味着只为这个目的抛出异常,或者它们仅仅意味着在特定情况下抛出异常,但没有真正指定其他人应该何时抛出它。
在MSDN上的IOException页面上,它建议在适当的地方使用FileLoadException:
IOException是使用流、文件和目录访问信息时引发的异常的基类。
基类库包括以下类型,每种类型都是IOException的派生类:
在适当的情况下,使用这些类型而不是IOException。
摘要:如果文件扩展名未知,应该抛出IOException或FileLoadException (我不想定义自己的异常)。
提前谢谢。
发布于 2009-11-25 13:10:07
您应该抛出IOException,而不要抛出非常具体和“技术性”的FileLoadException (而您的异常应该是“面向应用程序的”)。尝试使用FileLoadException分析Reflector类型(在mscorlib中),您将看到它仅用于msdn中定义的目的。然后想象有一天您的代码使用在一个“插件上下文”,将如何反应主机程序捕获FileLoadException意味着一个程序集未能正确加载.
发布于 2009-11-25 12:57:35
我不会抛出一个被记录为非常具体的用例的异常,并且可能会混淆其他人。
如果无法定义新的异常,请继续使用IOException。
发布于 2009-11-25 13:03:16
FileLoadException似乎不太适合,因为它专门用于程序集。
IOException是合适的,但它感觉非常通用,不会让调用方优雅地处理它,从而将它与更一般的错误区分开来。
如果您真的必须在这里抛出异常,请考虑NotSupportedException,它标识了执行对象不支持的操作的尝试,在这种情况下加载您不识别的文件格式。
https://stackoverflow.com/questions/1796738
复制相似问题