专家:本规范的不同之处是什么?

1 .net c# arrays generics c#-3.0

我问这个是因为我使用通用表单得到了错误"ArgumentOutOfRange".

  List<WaitHandle> arraywaithandles = new List<WaitHandle>(4);
Run Code Online (Sandbox Code Playgroud)

要么...

    WaitHandle[] A = new WaitHandle[4]
Run Code Online (Sandbox Code Playgroud)

这有效:

       for (int i = 0; i < 4; i++)
        {
            A[i] = (arrayresultados[i].AsyncWaitHandle);
        }
Run Code Online (Sandbox Code Playgroud)

这不起作用:

       for (int i = 0; i < 4; i++)
        {
            arraywaithandles[i] = (arrayresultados[i].AsyncWaitHandle);
        }
Run Code Online (Sandbox Code Playgroud)

In *_*ico 7

这个:

new List<WaitHandle>(4);
Run Code Online (Sandbox Code Playgroud)

创建一个初始容量为4 的List对象WaitHandles.这意味着List上面的行之后将保持为零WaitHandles,但至少有足够的内存来接收4 WaitHandles而不必在以后执行额外的内存分配.

这样,如果你知道你需要插入200 WaitHandles但实际上没有它们,你可以让List对象WaitHandles在一次运行中分配足够的内存200 而不必在添加时重新分配WaitHandles.

这就是为什么你的第一个for循环引发ArgumentOutOfRange异常,因为你试图访问不存在WaitHandlesarraywaithandles.如果您需要添加WaitHandlesList,那么你可以使用适当命名的List<T>::Add()方法.

另一方面,这个:

new WaitHandle[4];
Run Code Online (Sandbox Code Playgroud)

创建一个4的数组,WaitHandles在上面的行结束时将存在.