2013-02-06 3 views
-1

구조체 내부의 목록에 대한 속성을 작성하려면 어떻게해야합니까?구조체 내부의 목록 속성

내 코드 :

public struct Config 
{ 
    List<int> ipAddress = new List<int>(); 
} 
+1

강조 표시, 오른쪽 클릭, 리펙터, 캡슐화 필드. –

+1

그래서 어떤 문제에 직면 해 있습니까? –

+0

@jeffamaphone 그건 시각 스튜디오 특유의, 저자는 다른 ide를 사용 중일 수 있습니다. –

답변

1

은 아래를 참조하십시오. 당신이 자동 GET을 사용하지 않으려면 당신이 원하는 모든 참조 유형 null에 기본 및 수 없습니다 것이다 자동 속성을 (만들 경우

public struct Config 
{ 
    List<int> ipAddress { get; set; } 
} 

은 또는/

public List<int> ipAddress 
{ 
    get 
    {    
     return ipAddress?? new List<int>(); 
    }  
    set 
    { 
     ipAddress = value; 
    } 
} 
+0

이것은 자동으로 새로운 인스턴스에 할당하지는 않지만'null'이 될 것입니다. (그리고'struct'의 기본 생성자를 오버라이드 할 수 없습니다) –

4

설정 @scartag가 제안한대로 할 수있다. 코드에서의 일을하고 실제 참조로 초기화하려는 경우가 struct의 필드를 초기화 할 수 없기 때문에

public struct Config 
{ 
    // will default to null 
    List<int> ipAddress {get; set;} 
} 

그러나, 당신은 문제로 실행됩니다. 기본 설정 만있을 수 있습니다. 문제를 더욱 악화 시키려면 기본 생성자를 재정의하여이를 수행 할 수 없습니다.

일반적으로 struct은 작고 바람직하지 않은 유형의 경우에 가장 적합합니다. 이 용도로 class을 사용하고 싶지 않은 이유가 있습니까?

public struct Config 
{ 
    private List<int> _ipAddress; 
    private bool _isAssigned; 

    public List<int> 
    { 
     get 
     { 
      if (!_isAssigned) 
       _ipAddress = new List<int>; 
      return _ipAddress; 
     } 
     set 
     { 
      _ipAddress = value; 
      _isAssigned = true; 
     } 
    } 
} 

을하지만 실제로는이 속도로 그것은을 사용하는 것이 좋습니다 :

당신이 는 "초기화"필드와 struct을 만들려면 않은 경우 지금, 당신은 약간 게으른 논리를 속일 수 있습니다 class 당신 필드를 초기화하거나 기본 생성자를 오버라이드 (override) 할 수 있기 때문에 앤드류는 코멘트에 언급 한 바와 같이, 다시

public class Config 
{ 
    public List<int> ipAddress {get; set;} 

    public Config() 
    { 
     ipAddress = new List<int>(); 
    } 
} 

과, I 강하게 스와 ggest looking than MSDN guidance on choosing between struct and class

+0

다행인데, 대신 클래스를 사용했습니다. – Art

관련 문제