组件是否适合抛出一个至少不包含文件名的FIleNotFound异常?

时间:2010-07-05 21:39:59

标签: c# clr

组件是否适合抛出一个至少不包含文件名的FileNotFoundexception?

3 个答案:

答案 0 :(得分:2)

也许,但请不要。这个可怜的家伙试图弄清楚出了什么问题以及如何解决它,这让他绝对疯狂。

答案 1 :(得分:0)

假设有问题的文件应该不可见 - 就像用户的业务一样,不知道它。是的,这有点尴尬,但这是一个合法的情况。

(并非它证明抛出FNFException;在这种情况下,通用的“内部错误”会更合适。)


linked question的情况多种多样。 COM +组件确实不会抛出FileNotFoundException。它仅通过特定的ThrowExceptionForHRInternal()方法通知运行时有关错误的发生。请注意,它(可能)处理非托管组件,因此所有可用的错误详细信息都是操作系统提供的 - 它可能必须使用API​​调用,例如GetLastError()

操作系统提供了一些system error codes,它将揭示问题的本质。不幸的是,在这个级别上,几乎所有你得到的东西......所以,这次没有文件名。

答案 2 :(得分:0)

我认为如果你正在编写一个组件,你不应该抛出这样的异常。这使您的客户与您的实施紧密相关。我的意思是,现在,您正在读取文件,并且消费者已接受过训练,只能捕获System.IO.IOException。但是,当您的下一个版本中界面保持不变时,您会转到Web服务。

您身边的实施变更,对您的消费者来说只是一个突破性的变化。他们现在必须重新编写代码以捕获FaultException。

如果创建自己的异常(就像在.NET Framework中一样),您应该做些什么。为此,使用类似DataSourceEndpointNotFoundException或类似的泛型,并且可以附加/包含IOException作为内部异常,为它们提供更多线索。但是这种方法可以在未来对您的代码进行验证,这样如果您更改实现,那么您的客户就不会受到影响。希望有所帮助。