2014-02-11 61 views
0

我想通过使用下面的代码将值传递给同一对象的列表。如何将值传递给子对象?

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

如果我更改了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; }); 
    } 
} 

请帮助? 在此先感谢。

+0

尝试'私人儿童SOURCELIST = NULL;' –

+0

困惑,因为你正在创建一个人怎么办,他们已经有了孩子的姓分配? –

+0

顺便说一下:'if(sourceList!= value)'不会起作用。 (除非你想比较对象的引用) –

回答

0

从Children类中移除构造函数,并将'foreach语句'放入SourceList集合中,并且仅在getter中创建一个新的sourcelist(如果不是inicialized的话)。

就像这样:

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

     } 
+0

我刚刚测试过,这是一个好主意,但是在编辑属性网格中的属性时不显示父母的姓氏。 – thewikus

0

此行是造成你的问题:private Children sourceList = new Children(Surname);

的原因是字段初始化在他们可以访问的限制,在C#规范指出,他们能够” t引用正在创建的实例,因此您可以在字段声明中访问Surname。

可以在构造函数中设置你的属性