C # ArrayList вызов класса конструктора - PullRequest
4 голосов
/ 27 апреля 2010

Я знаю, что ArrayList, вероятно, не подходит для этой конкретной ситуации, но приучите меня и помогите мне избавиться от головной боли.

У меня есть класс конструктора, подобный следующему:

class Peoples
    {
        public string LastName;
        public string FirstName;
        public Peoples(string lastName, string firstName)
        {
            LastName = lastName;
            FirstName = firstName;
        }
    }

И я пытаюсь создать ArrayList для создания коллекции, вызывая этот конструктор. Однако я не могу найти способ правильно построить ArrayList, когда я использую этот конструктор. Я понял это с помощью Array, но не ArrayList.

Я пытался построить мой ArrayList:

ArrayList people = new ArrayList();
            people[0] = new Peoples("Bar", "Foo");
            people[1] = new Peoples("Quirk", "Baz");
            people[2] = new Peopls("Get", "Gad");

Моя индексация, по-видимому, выходит за пределы диапазона, в соответствии с полученным исключением.

Ответы [ 7 ]

9 голосов
/ 27 апреля 2010

Должно быть:

people.Add(new Peoples(etc.));

вместо

people[0] = new people()...;

Или еще лучше:

List<People> people = new List<People>();

people.Add(new People);

Просто чтобы быть полным. Используя прямой массив:

People[] people = new People[3];

people[0] = new People();
4 голосов
/ 27 апреля 2010

Попробуйте people.Add(new Peoples("Bar", "Foo");

3 голосов
/ 27 апреля 2010

Когда вы попытаетесь вызвать людей [i] без предварительного заполнения списка массивов, вы получите исключение IndexOutOfRangeException. Сначала вы должны добавить в ArrayList.

ArrayList list = new ArrayList();
list.Add(new Peoples("Bar", "Foo"));

Затем вы можете получить доступ к списку по индексу, который будет выполнен в цикле foreach или for.

Есть ли причина, по которой вы не используете List<Peoples>, которая дает вам строго типизированную коллекцию? Кроме того, у вас есть общедоступные поля в классе, хотя я понимаю, что вы, вероятно, просто собрали этот код для вопроса.

3 голосов
/ 27 апреля 2010

Вам нужно сделать

people.Add (new Peoples("Bar", "Foo"));
people.Add (new Peoples("Quirk", "Baz"));
people.Add (new Peoples("Get", "Gad"));
3 голосов
/ 27 апреля 2010

Вы должны добавить элементы в список. Как следующее

ArrayList people = new ArrayList(); 
people.Add(new Peoples("Bar", "Foo"));
2 голосов
/ 27 апреля 2010

Для добавления в список массивов необходимо использовать функцию ArrayList.Add .

ArrayList peoplesArray = new ArrayList();
peoplesArray.Add(new Peoples("John","Smith");
0 голосов
/ 18 мая 2010

К вашему сведению, ArrayList многими считается злом. Как сказал Кевин, нам было бы лучше List .

Список - это то, что называется универсальным. Google "строго набрал", "бокс" и "дженерики", чтобы лучше понять, почему.

вернуться к исходному вопросу: Размер массива должен быть объявлен при создании экземпляра, т.е. Люди [] люди = новые люди [5];

это создает 5 пустых ячеек в массиве, так что вы можете получить доступ к ячейкам, используя нижний индекс, т.е. [0]

ArrayList или List при создании экземпляра с использованием конструктора по умолчанию не имеет ячеек, т.е. Список человек = новый список ();

человек [0] на данный момент не существует.

использовать people.Add (new People ("first", "last")); добавить новую ячейку в список. теперь индекс [0] действителен, но [1] все еще недействителен, потому что есть только одна ячейка.

Список, т. Е. ArrayList или List, может динамически увеличиваться с помощью .Add (). После добавления в список вы можете ссылаться на них, используя нижний индекс [i], но вы не можете использовать этот нижний индекс для их добавления.

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