在 C# 中引发保留异常时会出现啥问题? [关闭]

Posted

技术标签:

【中文标题】在 C# 中引发保留异常时会出现啥问题? [关闭]【英文标题】:What can go wrong when throwing a reserved exception in C#? [closed]在 C# 中引发保留异常时会出现什么问题? [关闭] 【发布时间】:2013-02-12 13:49:08 【问题描述】:

如果您在代码中抛出 System.IndexOutOfRangeException (see reference),FxCop 会违反规则 CA2201。这样做的理由是,根据文档,System.IndexOutOfRangeException 是“保留的,只能由公共语言运行时抛出”。

但是如果你抛出System.IndexOutOfRangeException,实际上会出什么问题呢?

【问题讨论】:

你为什么需要自己扔? @Romoku - 即便如此。对于大多数类型,您将在已经抛出这个的现有类型中拥有底层存储。 IndexOutOfRangeException 的文档明确指出它特定于数组,因此当它被抛出时,用户将开始寻找数组。如果参数超出范围,通常会抛出 ArgumentOutOfRangeException。 +1 因为这是一个可以用事实回答的明确问题。我不太明白为什么有人会投票关闭它,除非它是重复的,其中一位 close 选民介意解释一下吗? 尽管它可以并且将正常工作,但隐含的假设是运行时抛出此异常而不是您的代码。这可能看起来并不重要,但是当您或其他人必须在数月或数年内解决此问题时,它可能会导致某人走上错误的道路。 【参考方案1】:

什么都没有。

从技术角度来看,抛出这个异常是完全没问题的。如果你这样做,什么都不会破坏。

但请记住,只有在首先遇到 System.IndexOutOfRangeException 时才应该抛出 System.IndexOutOfRangeException,否则这个异常将不合适,因为它非常明确地定义了要使用的异常类型为了。 MSDN states for theSystem.IndexOutOfRangeException:

尝试访问具有超出数组边界的索引的数组元素时引发的异常。这个类不能被继承。

【讨论】:

以上是关于在 C# 中引发保留异常时会出现啥问题? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

当自动关闭资源时尝试使用资源引发异常以及异常时会发生啥

关闭 C++ 控制台应用程序时会发生啥

在 C# 中添加 long/ulong SSE 不会引发溢出异常?

将 LED 切换到 TORCH 模式时会出现啥错误?

从 C# 应用程序内部调用 Matlab 编译器会引发异常

在 Ruby 中引发异常与抛出异常有啥区别?