在c#中使用ConcurrentStack时出现奇怪的异常
本文关键字:异常 ConcurrentStack | 更新日期: 2023-09-27 18:09:12
我有这个c#代码,它抛出一个ArgumentOutOfRangeException
,我想知道为什么?
ConcurrentStack<int> intsStack = new ConcurrentStack<int>();
int[] myInts = new int[0];
intsStack.PushRange(myInts);
ArgumentOutOfRangeException
误差的Message
属性:
startIndex参数必须大于等于零。
参数名称:startIndex
数组是空的,但不是null
,我没有预料到任何异常,只是没有添加到堆栈中。这是一个合理的例外吗?
从实现的角度来看,看一下PushRange(T[], int, int)重载的定义是合理的:
ArgumentOutOfRangeException: startIndex或count为负。或者startIndex大于或等于项的长度。
数组的长度为零。因此,startIndex不可能存在有效值。
从文档角度来看,这是不合理的,因为PushRange(T[])重载的文档没有提到ArgumentOutOfRangeException
。
如果数组为空,则它没有索引0,这就是它抱怨的原因。
对于从零开始的索引,0是第一个索引,指向第一个项。所以它实际上是在抱怨数组中没有任何内容
AddRange的参数是一个空数组,因此您试图将零项压入堆栈。所以这是一个非常合理的例外。
编辑:但是你是对的,这是一个糟糕的异常消息。你可以猜测这是因为在内部重载PushRange(T[], Int32, Int32)实际上抛出了异常。