gpt4 book ai didi

c# - 抛出负数组大小的 OverflowException 背后的基本原理?

转载 作者:太空狗 更新时间:2023-10-29 20:59:59 25 4
gpt4 key购买 nike

编写代码后可以归结为以下内容:

var size=-1;
var arr=new byte[size];

我很惊讶它抛出一个 OverflowException . OverflowException 的文档状态:

The exception that is thrown when an arithmetic, casting, or conversion operation in a checked context results in an overflow.

我看不出为这个异常提供负数大小和数组长度如何符合给出的描述,所以深入研究发现这确实是指定的行为:

The computed values for the dimension lengths are validated as follows. If one or more of the values are less than zero, a System.OverflowException is thrown and no further steps are executed.

我想知道为什么选择了 OverflowException。如果你问我,这很误导人。它花费了我至少 5 分钟的调查时间(不算我在这里的思考)。谁能阐明这个(在我看来)奇特的设计决定?

最佳答案

这几乎可以肯定是一种优化。 .NET 框架代码非常注重检查参数,让程序员掉进成功的陷阱。但这不是免费的。成本相当低,许多类方法占用的机器周期比花在检查上的要多得多。

但是数组比较特殊。它们是框架中非常核心的数据结构。几乎每个集合类都建立在它们之上。 Array 类中的任何开销都会直接影响位于它之上的大量代码的效率。避免检查是可以的,当内部代码需要将值转换为无符号时,无论如何都会隐式检查它。它很少绊倒。因此检查两次并不值得更好的异常消息。

关于c# - 抛出负数组大小的 OverflowException 背后的基本原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3762060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com