我问这个问题是因为使用通用表单时出现错误“ ArgumentOutOfRange”。

  List<WaitHandle> arraywaithandles = new List<WaitHandle>(4);


要么...

    WaitHandle[] A = new WaitHandle[4]


这有效:

       for (int i = 0; i < 4; i++)
        {
            A[i] = (arrayresultados[i].AsyncWaitHandle);
        }


这不起作用:

       for (int i = 0; i < 4; i++)
        {
            arraywaithandles[i] = (arrayresultados[i].AsyncWaitHandle);
        }

最佳答案

这个:

new List<WaitHandle>(4);


creates a List object that has an initial capacity of 4 WaitHandles。这意味着在上一行之后的List将保持零WaitHandles,但至少具有足够的内存来接收4个WaitHandles,而不必稍后执行额外的内存分配。

这样,如果您知道需要插入200个WaitHandles而不是立即插入它们,则可以让List对象一次性分配足够的内存以容纳200个WaitHandles,而不必重新分配为您添加WaitHandles

这就是为什么您的第一个for循环引发ArgumentOutOfRange异常的原因,因为您尝试访问WaitHandles中不存在的arraywaithandles。如果需要将WaitHandles添加到List,则可以使用恰当命名的List<T>::Add() method

另一方面,这是:

new WaitHandle[4];


创建一个由4个WaitHandles组成的数组,该数组在上述行结束时将存在。

关于c# - 致专家:此代码有何区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4295585/

10-10 13:30