【问题标题】:C#: Do you raise or throw an exception?C#:你提出还是抛出异常?
【发布时间】:2010-11-02 10:01:25
【问题描述】:

我知道这可能并不重要,但我想知道什么是正确的。

如果一段代码包含某个版本的throw new SomeKindOfException()。我们是否说这段代码可能会引发异常?还是抛出异常?

关键字是throw,所以我有点倾向于那个,但是引发异常也经常使用......

它们有什么不同的含义吗?其中一个是否暗示了与另一个的差异?还是只是两个词的意思完全一样?

【问题讨论】:

标签: c# exception terminology throw raise


【解决方案1】:

各种语言的术语偏爱“投掷”。我同意“抛出”更有意义,因为这是使用的关键字,编译器/语言文档总是提到异常被“抛出”。

但是,在庞然大物的肚子里,异常实际上是Raised,而不是抛出。如果您发现自己在调试器中足够深入地盯着EXCEPTION_RECORD,那么您会使用SEH 的术语,其中特定类别的编译器/语言异常(eh, clr, vcpp)只是众多异常类型之一.我猜想引发异常的原始条件(例如页面错误和堆栈溢出)是内核“注意到”的条件,即“通知”用户模式的条件,而不是用户代码“抛出”到自己身上的异常,所以这个词在这种情况下更有意义。

【讨论】:

    【解决方案2】:

    投掷或加注似乎都不错,它们对我的意义相同。我不会写它,但是当我说话时,我通常会说“查出异常”。

    对于事件,我会使用“触发事件”或“引发事件”。

    【讨论】:

    • “火”当然是事件的常用用法。在提出术语指南时,这样做的团队认为“火”似乎是不必要的,所以他们建议避开“火”而支持“提高”。我个人的看法是,这有点傻,但是“加薪”很好,我们不妨将其中之一标准化。
    【解决方案3】:

    我认为虽然 throw 更好,但这两个术语是可以互换的。如果您必须在某些文本中使用它两次以避免重复相同的单词,则非常有用。但这是技术写作所不需要的文体(但仍然是一件好事)。

    【讨论】:

    • 你在英文写作中是对的,但在技术写作中最好始终使用同一个词,否则读者可能会认为有一些不同。
    【解决方案4】:

    在 C# 术语中, raise 用于事件上下文,throw 用于异常上下文。

    个人觉得throw/catch组合比raise/catch更美。

    【讨论】:

    • 啊,当然,我完全同意。现在完全有道理!感谢您清除它:)
    • C# 也使用“lift”,表示“在不可为空的类型上提供可空版本的运算符”,“hoist”表示“将局部变量转换为闭包类的字段”。所以在 C# 中,你可以举起、提升或举起东西,它们都有不同的含义。
    【解决方案5】:

    我不能代表 C#,但在 C++ 中选择了“throw”,因为“raise”已被视为标准函数名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      相关资源
      最近更新 更多