1

我有一些代码,给定一个 ID,从数据库中返回一个项目。如果没有项目与给定的 ID 匹配,是否适合抛出 a KeyNotFoundException,或者此类异常仅适用于 Dictionary 类型?

4

3 回答 3

5

根据您用于访问数据库的框架(ODBC、ADO.NET 等),框架可能会抛出更好的替代方案。

命名空间包含几个这样的System.Data例外,例如:http: //msdn.microsoft.com/library/system.data

但是,实际上,只要您记录要抛出的异常以及在什么条件下都无关紧要。使用常见的东西是最好的,因为人们可能会假设,但如果他们正在阅读文档,他们将处理您所说的任何异常。

于 2014-01-15T19:40:11.787 回答
1

状态的MSDN 页面KeyNotFoundException

当指定用于访问集合中元素的键与集合中的任何键都不匹配时引发的异常。

语义上 aKeyNotFoundException是合适的。只需确保您的错误消息具有足够的描述性,以便在调试时提供实际帮助。此外,请记住,您会丢失使用自定义异常类型会为您提供的任何上下文类型信息。

自定义异常类型使您能够使用通用 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
}

无论您选择哪种,只要确保您考虑它,它是一致且合乎逻辑的。不要只选择一个,因为它更容易。

于 2014-01-15T19:41:43.037 回答
-1

MSDN说是*(如果您将数据库表视为集合)-

当指定用于访问集合中元素的键与集合中的任何键都不匹配时引发的异常。

为什么不只是返回false或其他一些指示该值不在数据库中的指示?

于 2014-01-15T19:41:50.350 回答