缺少数据的例外情况

Elz*_*Elz 50 c# exception

我想知道丢失数据应该抛出什么样的异常.例如,如果xml节点不包含数据." 抛出新的异常(...) " 会很容易,但不建议这样做.另一个选择是创建一个新的异常类,如MissingDataExceptionInvalidDataException,但是没有针对这种情况的内置异常类?

Pau*_*ner 58

根据经验,检查现有的.NET框架异常,以便在派生自己的异常之前抛出合适的异常.要直接回答您的问题,目前没有可用的"缺失数据"异常,但这并不意味着没有合适的例外来涵盖您的情况.

在你的情况下,谦虚InvalidOperationException可能是合适的; 在对象上调用方法时抛出此异常,但对象的状态不适合该操作.这方面的示例包括调用封闭流上的方法和已经通过集合末尾的枚举器.如果XML数据是对象的内部状态,并且方法调用已发现错误数据,InvalidOperationException则是一个很好的候选者.

如果要将XML数据传递给方法,则ArgumentException其衍生物或其衍生物可能是合适的选择.这些异常中有一小部分,都表明传递给方法的参数不是预期的方法.

当您希望以与其他异常不同的方式处理异常情况时,您只需要创建自定义异常.如果您确实选择创建自己的异常,请确保从更高的异常派生它Exception,以便基类隐含异常的性质.


Kir*_*nko 16

还有System.Data.ObjectNotFoundException,你可以考虑类.

更新:从Entity Framework 6开始,此异常类的完全限定名称为System.Data.Entity.Core.ObjectNotFoundException.

有关EF5-> EF6命名空间更改的更多详细信息,请参阅此问题.

  • @Stijn当然.这就是为什么我说'你可以考虑'. (6认同)
  • 那个是System.Data.Entity.dll的一部分,可能会创建一个不必要的依赖项. (2认同)

Kep*_*ing 8

不要调用"抛出新异常",因为你不知道如何处理异常.

定义自己的例外.更具体,例如XMLDataMissingException.然后,您可以向用户提供一个重要的消息或记录它.


Ben*_*son 6

对于一般的缺失数据场景,数据由唯一 ID 引用,那么KeyNotFoundException可能是合适的 - 例如

throw new KeyNotFoundException($"Expected record for key {key} not found.");

它位于System.Collections.Generic命名空间中。