我问这个问题是因为使用通用表单时出现错误“ 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/