Как вы создаете динамическое количество объектов? Справка по шаблону дизайна - PullRequest
1 голос
/ 17 сентября 2010

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

Видите ли, у меня есть эти настройки в файле XML, которые читаются во время выполнения. Для каждого параметра я хочу создать новый объект, который делает вещи.

Я думаю, что могу это сделать, но проблема в том, как мне ссылаться на эти объекты?

Например:

  <person>
    <name>Jared</name>
    <age>28</age>
  </person>
  <person>
    <name>Nicole</name>
    <age>32</age>
  </person>

Обычно я просто делал бы что-то вроде:

Person Jared = new Person();

но я понятия не имею, сколько людей будет в файле XML. Потом, если я захочу установить / получить возраст Джареда, я не пойму, как на него ссылаться.

Мне не хватает, как динамически создавать объекты с использованием ООП?

-Josh

Ответы [ 4 ]

6 голосов
/ 17 сентября 2010

Вам необходимо создать List<Person> экземпляр , который может хранить ноль или более Person объектов.

Например:

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

people.Add(new Person(...));
people.Add(new Person(...));

Console.WriteLine(people[1].Age);

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

2 голосов
/ 17 сентября 2010

A Dictionary<string,Person> может соответствовать ситуации. Таким образом, если вы хотите сослаться на человека, вы можете сделать это, указав имя этого человека в качестве ключа.

1 голос
/ 17 сентября 2010

Вы можете сделать это довольно компактно с Linq:

var xml = XDocument.Load("persons.xml");

var persons =   // person == IEnumerable<Person>
      from P in xmlDescendants("person")
      select new Person()    // your Person class
      {
           Name = P.Element("name").Value,
           Age = P.Element("age").Value
      };
0 голосов
/ 17 сентября 2010

Вы хотите поместить их в коллекцию, такую ​​как List<T>:

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

people.Add(new Person("Jared", 28));
people.Add(new Person("Nicole", 31));

Подробнее см. В разделе Классы сбора в MSDN.

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