如何将值传递给子/列表对象?

时间:2014-02-11 16:43:43

标签: c# list object properties propertygrid

我试图通过使用以下代码将值传递给同一对象的列表。

使用以下代码我得到一个“字段初始值设定项不能引用非静态字段,方法或属性”错误。

如果我更改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 个答案:

答案 0 :(得分:0)

从Children类中删除构造函数,并将'foreach语句'放在SourceList集中,如果不是inicial化,则只在getter中创建一个新的源列表。

就像这样:

  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>
        {

        }

答案 1 :(得分:0)

这一行导致了您的问题:private Children sourceList = new Children(Surname);

原因是字段初始值设定项受限于它们可以访问的内容,c#规范声明它们无法引用正在创建的实例,因此您可以“在字段声明中访问Surname。”

您可以在构造函数

中设置属性