在C#中使用ConcurrentStack时出现奇怪的异常

TTT*_*TTT 8 c# concurrency

我有这个C#代码,它抛出一个ArgumentOutOfRangeException,我想知道为什么?

    ConcurrentStack<int> intsStack = new ConcurrentStack<int>();
    int[] myInts = new int[0];
    intsStack.PushRange(myInts);
Run Code Online (Sandbox Code Playgroud)

错误的Message属性ArgumentOutOfRangeException:

startIndex参数必须大于或等于零.

参数名称:startIndex

数组是空的但不是null,我没想到任何异常,只是没有任何东西被添加到堆栈中.这是否是一个合理的例外?

Pet*_*ery 2

AddRange 的参数是一个空数组,因此您尝试将零个项目推入堆栈。所以这是一个非常合理的例外。

编辑:但你是对的,这是一个糟糕的异常消息。您可以猜测这是因为内部重载 PushRange(T[], Int32, Int32) 实际上抛出了异常。

  • 是的,但是为什么推送一个空数组“这么糟糕”呢?当您通过 AddRange() 将空数组添加到列表时,不会出现异常。 (3认同)