2014-02-11 252 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。

可以在構造函數中設置你的屬性