我有这个C#代码,它抛出一个ArgumentOutOfRangeException
,我想知道为什么?
ConcurrentStack<int> intsStack = new ConcurrentStack<int>();
int[] myInts = new int[0];
intsStack.PushRange(myInts);
Message
错误的ArgumentOutOfRangeException
属性:
startIndex参数必须大于或等于零。
参数名称:startIndex
数组是空的但不是null
,我根本没想到任何异常,只是没有添加任何内容。这是否是一个合理的例外?
答案 0 :(得分:3)
从实施的角度来看,如果你看一下PushRange(T[], int, int) overload的定义是合理的:
ArgumentOutOfRangeException: startIndex 或 count 为负数。或 startIndex 大于或等于项目的长度。
数组的长度为零。因此, startIndex 没有可能的有效值。
从文档角度来看,这是不合理的,因为PushRange(T[]) overload的文档没有提及ArgumentOutOfRangeException
。
答案 1 :(得分:2)
AddRange的参数是一个空数组,因此您尝试将零项目推送到堆栈。所以这是一个非常合理的例外。
编辑:但你是对的,这是一个错误的异常消息。您可以猜测它是因为内部重载PushRange(T [],Int32,Int32)实际上是抛出异常。答案 2 :(得分:2)
如果数组为空,则它没有索引0,这就是它所抱怨的。
使用基于零的索引,0是第一个索引,指向第一个项目。所以实际上它抱怨数组中没有任何东西。