在事后发现非法/损坏的容器对象状态的哪个例外?

Jef*_*tin 1 c# compact-framework coding-style exception .net-3.5

我遇到过一种情况,由于我调用的其他一些代码区域无法复制Dictionary<TKey, TValue>它返回的内容,因此会出现并发问题:Dictionary似乎包含非法的空键.

我已经修复了底层错误,但为了帮助识别这个问题,如果它将来再次出现,我会添加一些代码,在循环中显式检查null键,处理返回的字典并在事情发生之前抛出进一步.我不确定要抛出哪个异常类,或者如果我定义一个新类,我要确定哪个异类.

Eri*_*ert 5

是否有任何来电者都期待这个例外?任何调用者都可以处理异常吗?任何呼叫者都可以从异常中恢复吗?在投掷之后你会想象会发生什么?

在这种情况下,数据结构被任意破坏,几乎没有任何不变量被认为是真的.事实上,你仍在运行代码是一个奇迹.除非你有充分的理由不这样做,否则我会倾向于记录诊断错误所需的任何信息并快速失败.抛出异常并运行finally块不太可能做得更好.

当然,最终你所做的一切都是权宜之计.修复破坏数据的错误.

  • 我*修复了这个错误.我想我在这里要问的是,如果我发现自己已经搞砸了该怎么办 - 这基本上是断言失败的情况.记录它和`Environment.FailFast()`? (2认同)