【问题标题】:Choosing the right exception type when custom attribute is missing缺少自定义属性时选择正确的异常类型
【发布时间】:2010-08-15 12:18:21
【问题描述】:

当未找到预期的自定义属性(我更喜欢现有的 .NET 异常之一)时,我在选择要抛出的正确类型的异常时遇到了一些麻烦。

在这种情况下,您有什么建议?提前致谢。

编辑:

这里是他的上下文:

[<ExpectedAttribute()>]
let foo args ... = ...

函数foo(用户定义)被传递给运行时引擎。如果自定义属性不存在,运行时必须抛出异常。

【问题讨论】:

  • 请提供更多上下文 - 将在哪里抛出异常?它与论点有关吗?

标签: .net exception-handling custom-attributes


【解决方案1】:

我会建议像“InvalidOperationException”或“InvalidArgumentException”这样的通用内容,并将有关预期属性的详细信息放在消息中。

【讨论】:

  • InvalidOperationException 是合适的,但 InvalidArgumentException 不合适,ArgumentException 和子类型被明确定义为与方法参数验证有关。
  • 两者都不够具体,但你是对的,InvalidOperation 更接近一点。自定义异常可能是最好的解决方案。
【解决方案2】:

如果缺少 custom 属性,它将不适合 System 异常。

您可以使用系统异常,但您的域是什么?什么样的合同被打破了?这是关于序列化或测试还是......


编辑,在您添加foo 之后:与系统异常最接近的是 System.ArgumentException ,因为您的引擎正在接收不符合其要求的参数。

但我会定义我自己的MissingExpectedAttribute 异常。

【讨论】:

    【解决方案3】:

    如果调用的构造函数、方法或属性被赋予了违反规则的对象,则 ArgumentException。如果违反规则的对象是您之前操作的状态的一部分,然后调用了坚持存在此属性的方法或属性,则为 InvalidOperation。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多