Это:
new List<WaitHandle>(4);
создает List
объект, который имеет начальную емкость 4 WaitHandles
. Это означает, что List
после вышеприведенной строки будет содержать ноль WaitHandles
, но имеет по крайней мере достаточно памяти для получения 4 WaitHandles
без необходимости дополнительного выделения памяти позже.
Таким образом, если вы знаете, что вам нужно будет вставить 200 WaitHandles
, но на самом деле у вас их нет прямо сейчас, вы можете заставить объект List
выделять достаточно памяти для 200 WaitHandles
за один раз вместо перераспределить при добавлении WaitHandles
.
Вот почему ваш первый цикл for
вызвал исключение ArgumentOutOfRange
, потому что вы пытались получить доступ к несуществующему WaitHandles
в arraywaithandles
. Если вам нужно добавить WaitHandles
к List
, то вы должны использовать метко названный List<T>::Add()
метод .
Это, с другой стороны:
new WaitHandle[4];
создает массив 4 WaitHandles
, который будет существовать к моменту окончания указанной строки.