Member 13081540 Ответов: 2

C# добавление значений в список внутри списка


Привет,

Я уже задавал этот вопрос раньше, однако не перефразировал его правильно. Поэтому позвольте мне задать этот вопрос еще раз.

У меня три класса.
Человеку - сохранить лицо атрибутами
public string Name { get; set; }
        public string Surname { get; set; }
        public int Age { get; set; }
        public List<Date> dates{ get; set; } = new List<Date>();


Дата-сохранение объекта dateTime
<pre>  public class Date
    {
        public DateTime date { get; set; }
    }


listClass-основная функция: создание списка Класс person
public class listClass
{
     public List<Person> People{ get; set; } = new List<Person>();
}


В моей основной форме у меня есть две кнопки AddPerson и AddDate то, чего я пытаюсь достичь, - это разрешить (выбрав дату из dateTimePicker) добавлять количество дат к одному объекту внутри списка персон, то есть один человек может иметь 2-3 даты.

Что я уже пробовал:

Я правильно добавил человека.

private void SaveDriver(object sender, EventArgs e)
              {
                    Person p = new Person();
                    listClass list = new listClass();

                    p.Name = txtFirstName.Text;
                    p.Surname = txtSurname.Text;
                    p.Age = int.Parse(txtAge.Text);

                    list.People.Add(p);
              }

Это работает правильно, он добавляет человека в список людей, который связан с Класс person

Чего я не знаю, так это как я предполагаю добавить в него количество дат, то есть у одного человека может быть 3 даты.

Я создал кнопку AddDate:
private void btnAddDate_Click_1(object sender, EventArgs e)
       {
           People p = new People();
           Date d = new Date();


           d.date = dtpDate.Value; //date time picker

           p.dates.Add(d); //trying to add the dates into the People list
         }


Я знаю, что последний бит кода неверен, потому что всякий раз, когда я нажимаю кнопку Добавить дату, он не добавляет дату из DateTimePicker в список "дата" в классе Person, так как же я предполагаю разрешить пользователю добавлять количество дат в объект person?

Заранее спасибо.

[no name]

Хорошо, так почему же вы не обновили свое предыдущее сообщение?
И до сих пор не ясно, почему вы думаете, что "последний бит кода неверен".

Member 13081540

Извините, в следующий раз я обновлю вопросы.

Я думаю, что это неправильно, потому что всякий раз, когда я нажимаю кнопку Добавить дату, она не добавляет эту дату в список "дата" в классе Person

[no name]

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

Member 13081540

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

[no name]

Да, и теперь вы создаете совершенно новых "людей", добавляя к ним, а затем выбрасываете все это, когда обработчик событий выходит.

Member 13081540

Хм, ладно. Тогда как же я не мог заставить все это "выбросить"?

CHill60

Есть что-то более неправильное, чем просто этот последний кусок кода!
People p = new People()? Имя класса listClass
public List<Date> dates{ get; set; } = new List<Claim>(); создает недопустимый знак ошибка компиляции, а что Claim ... разве это не должно быть List<Date>??

Member 13081540

Да, извините, это список & lt;Date & gt; dates{ get; set;} = new List< Date>();

CHill60

Что все равно приведет к ошибке компилятора недопустимого токена - вы не можете инициализировать такие свойства.

Member 13081540

Но People p = new People() используется для добавления новых людей в список< person> people в listClass

Даты используются для добавления количества дат внутри класса People в список, называемый List< date> dates

Ramza360

Это неверно CHill60, вы можете инициализировать свойства, используя этот синтаксис в C#.

CHill60

Какая версия C# это Рамза? Мой компилятор выдает ошибку "недопустимый токен' = 'в объявлении члена класса, структуры или интерфейса".
Конечно, если я изменю это свойство на инкапсулированное свойство с резервным полем вместо автоматического свойства, то, конечно, вы можете использовать этот синтаксис для инициализации поля.
Я использую VS2013, но я не уверен, что это когда-либо было по-другому

Ramza360

Это вещь VS 2015 (точнее, C# 6.0), но с VS 2015 Вы можете использовать некоторые из этих функций (включая эту) даже с c# 4.0.

CHill60

Справедливо. Я использую VS2013

Bryian Tan

Просто любопытно, где же люди? Я имею в виду класс :)

2 Ответов

Рейтинг:
2

Member 13082906

Я предположил, что вы используете Visual Studio IDE и в рамках проекта можете объявлять классы. Не имеет значения, что вы уже определили эти классы.


Рейтинг:
18

Chaminda Jayanath Udawatte

Эй, создайте объект people снаружи, но внутри класса form, как показано ниже

Public FormPeople: Window
{
 People people = new People();
 IList<People> peoples = new List<People>();
 
Public FormPeople()  {  
people.dates = new  List<Date>();
 }
private void btnAddDate_Click_1(object sender, EventArgs e)
        {
            
            Date d = new Date();            

            
            d.date = dtpDate.Value; //date time picker              
            
            people.dates.Add(d); //trying to add the dates into the People list
          }
}
private void AddPeople()
{
  peoples.add(people);
}


CHill60

Но где же определены эти другие классы? Люди? Это listClass.