Как я могу передать значение дочернему / списковому объекту?

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

Используя следующий код, я получаю сообщение об ошибке "Инициализатор поля не может ссылаться на нестатическое поле, метод или свойство".

Если я изменю свойство Surname, чтобы исправить это, я получу еще 2 ошибки.

Идея состоит в том, чтобы создать объект человека и передать его фамилию своим детям в списке.

Код:

public class Person
{
    public Person()
    {
    }

    private string name = "";
    public string Name
    {
        get { return name; }
        set { if (name != value) name = value; }
    }

    private string surname = "";
    public string Surname
    {
        get { return surname; }
        set { if (surname != value) surname = value; }
    }

    private Children sourceList = new Children(Surname);
    public Children SourceList
    {
        get { return sourceList; }
        set { if (sourceList != value) sourceList = value; }
    }
}

[TypeConverter(typeof(TypeConverter))]
public class Children : List<Person>
{
    public Children(string surname)
    {
        this.ForEach(person => { person.Surname = surname; });
    }
}

Пожалуйста помоги? Заранее спасибо.

2 ответа

Эта строка вызывает у вас проблему: private Children sourceList = new Children(Surname);

Причина в том, что инициализаторы полей ограничены в доступе к ним, спецификация C# утверждает, что они не могут ссылаться на создаваемый экземпляр, поэтому вы можете получить доступ к Фамилии в объявлении поля.

Вы можете установить свои свойства в конструкторе

Удалите конструктор из класса Children и поместите оператор "foreach" в набор SourceList и создайте новый исходный список только в получателе, если он не инициализирован.

Именно так:

  public class Person
    {
        public Person()
        {
        }

        private string name = "";
        public string Name
        {
            get { return name; }
            set { if (name != value) name = value; }
        }

        private string surname = "";
        public string Surname
        {
            get { return surname; }
            set { if (surname != value) surname = value; }
        }

        private Children sourceList;
        public Children SourceList
        {
            get { 
               if(sourceList == null)
                     sourceList = new Children();

               return sourceList; 
           }
            set { if (sourceList != value) 
                 sourceList = value.ForEach(person => { person.Surname = surname; }); 
                }
        }
    }

        [TypeConverter(typeof(TypeConverter))]
        public class Children : List<Person>
        {

        }
Другие вопросы по тегам