我有一些代码,给定一个ID,从数据库中返回一个项目。如果没有项目与给定的ID匹配,是否适合抛出KeyNotFoundException
,或者此类异常仅适用于词典类型?
答案 0 :(得分:5)
根据您用于访问数据库的框架(ODBC,ADO.NET等),框架可能会提供更好的替代方案。
System.Data
命名空间包含几个例外情况:http://msdn.microsoft.com/library/system.data。
但是,实际上,只要您记录了您正在抛出的异常以及在什么条件下它并不重要。使用普通的东西是最好的,因为人们可能会假设,但如果他们正在阅读文档,他们将处理你说的会抛出的任何异常。
答案 1 :(得分:1)
KeyNotFoundException
州的MSDN page:
为访问集合中的元素而指定的键与集合中的任何键都不匹配时引发的异常。
语义上KeyNotFoundException
是合适的。只需确保您的错误消息足够描述,以便在调试时实际 help 。另外,请记住,您丢失了使用自定义异常类型的任何上下文类型信息。
自定义异常类型使您能够使用常规C#惯用语来区分这两个条件,如下所示:
try
{
// do some database stuff
}
catch(KeyNotFoundException e)
{
// Here you know that it was more than likely caused by a Dictionary
// or some such collection
}
catch(DatabaseKeyNotFoundException e)
{
// Here you know that it was caused by a DB record not being found
}
无论您选择哪一种,只要确保您考虑一下,它就是一致且合乎逻辑的。不要只选择一个,因为它更容易。
答案 2 :(得分:-1)