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

时间:2010-11-28 05:45:21

标签: c# .net arrays c#-3.0 generics

我问这个是因为我使用通用表单得到了错误“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);
        }

3 个答案:

答案 0 :(得分:7)

此:

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的数组,该数组将在上一行完成时存在。

答案 1 :(得分:2)

您想尝试这样做:

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

答案 2 :(得分:0)

试试这个

List<WaitHandle> arraywaithandles = 
    Enumerable.Repeat<WaitHandle>(null, 4).ToList();