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