【问题标题】:Is there a system Exception to throw when calling a function that wasn't meant to be called?调用不应该调用的函数时是否会抛出系统异常?
【发布时间】:2015-05-06 20:07:16
【问题描述】:

假设我有一个可变对象,它有一个可以改变它的函数,并且在某些情况下不应该调用该函数。在这种情况下,我应该如何对调用函数的代码做出反应?

例如:

  • 对象:战斗
  • 函数:PlayRound()
  • 情况:战斗已经有赢家了
  • 连续性:战斗将以不一致的状态结束

我能想到两种行为方式,但都觉得不够:

  1. 返回一个魔法值,例如null。这样做的问题是不遵循Fail Faster的思想,使程序处于无效状态。

  2. 抛出异常。这是我觉得更合适的一个,但如果它已经存在一个可以履行该角色的新Exception,我想避免创建它。

对于第二种情况,我可以抛出类似ArgumentInvalidException 但我找不到这种情况的等价物。

此方案是否存在等效的现有异常?

注意:我们假设该函数已记录在案,并且明确指出在这种情况下绝不应调用该函数。我仍然认为如果开发人员没有阅读文档,它应该会失败=)

【问题讨论】:

  • 你根本不应该抛出异常 - 异常是针对“等等,wha......你是怎么做到的?”而不是“是的,我知道,不是现在……”不确定 Fail-Fast 是否鼓励您使用异常,但我对此表示怀疑……
  • @splite InvalidOperationException 专门为此目的而设计。如果不是例外,那你有什么建议?
  • @splite 我不同意。 “当方法调用对对象的当前状态无效时引发的异常”听起来非常适合这种情况。你会怎么做?
  • 同意,InvalidOperationException 最适合。 MSDN:“当方法调用对于对象的当前状态无效时引发的异常。”

标签: c# exception


【解决方案1】:

我会为此定义一个应用程序异常。但是你可以在这里理智地使用 InvalidOperationException。

【讨论】:

    猜你喜欢
    • 2010-12-06
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多