Список C # <GenericClass>(100) Принципы построения - PullRequest
2 голосов
/ 05 февраля 2012

Если я сделаю следующее:

List<GenericClass> listObj = new List<GenericClass>(100);

// Do I need this part too?
for (int i = 0; i < 100; i++)
{
    listObj[i] = new GenericClass();
}

По сути, я спрашиваю, будет ли компилятор C # автоматически запускать конструктор GenericClass для каждого из 100 объектов GenericClass в списке. Я искал в документации MSDN, а также здесь, в StackOverflow.

Спасибо за любую помощь.

Ответы [ 4 ]

3 голосов
/ 05 февраля 2012

Это не так, как List работает. Когда вы указываете емкость, это начальная емкость, а не количество элементов в списке. Список не содержит элементов, пока вы не добавите их с помощью метода Add. Списки не имеют максимальной емкости. И поскольку вы добавляете объекты с помощью метода Add, да, вам придется сначала их обновить.

Фактически, выполнение того, что вы задали в своем вопросе, приведет к исключению ArgumentOutOfRange.

Для того, что вы делаете, вам нужно использовать массив.

var listObj = new List<GenericClass>();
listObj[0] = new GenericClass(); // ArgumentOutOfRange exception

Это будет работать:

for (int i=0;i<100;i++)
{
    listObj.Add(new GenericClass());
}

Это то, что вы пытались сделать:

var arrayObj = new GenericClass[100];
for (int i = 0; i < 100; i++)
{
    arrayObj[i] = new GenericClass();                
}
1 голос
/ 05 февраля 2012

Да, вам нужно создать и добавить каждый экземпляр в список.Взгляните на раздел «Примечания» для этого стиля конструктора: http://msdn.microsoft.com/en-us/library/dw8e0z9z.aspx

Вы указываете, сколько элементов вы хотите поместить в список, чтобы при каждом добавлении списка не приходилось изменять размер за кулисами.новый экземпляр GenericClass к нему.

0 голосов
/ 05 февраля 2012

Поскольку вы не можете сделать это напрямую со списком, вы можете использовать вспомогательный метод, чтобы иметь генератор и использовать перегрузку List (IEnumerable collection).это может быть, если List будет поддерживать эту функцию из коробки.Программа-пример напечатает 100 строк, состоящих из 5 символов.

0 голосов
/ 05 февраля 2012

Нет!Здесь указывается начальная емкость.

Статья MSDN :

Емкость списка - это количество элементов, которые может содержать список.Когда элементы добавляются в список, емкость автоматически увеличивается по мере необходимости путем перераспределения внутреннего массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...