Как я могу передать значение дочернему / списковому объекту?
Я пытаюсь передать значение в список того же объекта с помощью следующего кода.
Используя следующий код, я получаю сообщение об ошибке "Инициализатор поля не может ссылаться на нестатическое поле, метод или свойство".
Если я изменю свойство 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>
{
}