2014-02-11 4 views
0

다음 코드를 사용하여 동일한 개체의 목록에 값을 전달하려고합니다.하위/목록 객체에 값을 전달하려면 어떻게해야합니까?

다음 코드를 사용하면 "필드 초기화자가 비 정적 필드, 메서드 또는 속성을 참조 할 수 없습니다."오류가 발생합니다.

수정하려면 성 속성을 변경하면 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

BTW :'if (sourceList! = value)'도 작동하지 않습니다. (개체의 참조를 비교하고 싶지 않다면) –

답변

0

Children 클래스에서 생성자를 제거하고 'foreach 문 '을 SourceList 집합에 넣고 인서 티드되지 않은 경우 getter에만 새 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> 
     { 

     } 
+0

나는 지금 이것을 테스트했지만 좋은 생각인데, propertygrid에서 속성을 편집 할 때 부모의 성을 표시하지 않습니다. – thewikus

0

것은이 줄 당신에게 문제의 원인이되는 : private Children sourceList = new Children(Surname);

이유는 초기화들이 액세스 할 수있는 제한되는 분야이다는 C#을 사양은 '그들이 할 수있는 것을 말한다 만들려는 인스턴스를 참조하십시오. 따라서 필드 선언에서성에 액세스 할 수 있습니다.

당신은