2010-12-12 6 views
2

는 IEnumerable <T> 질문

public class Example 
{ 
    public IEnumerable<Int32> Ids {get; private set;} 
    publicIEnumerable<string> Names {get; private set;} 
} 

문제가되지는 컴파일되지 않았 음을했다 미안 해요, 내가 놓친

같은 인스턴스 뭔가 클래스 내에서 속성의 형식으로 IEnumerable<T>를 사용하는 행위는 허용되지 않습니다 왜 여기에 물건을 쓰는 공공 접근, 질문은 왜 속성에 대한 IEnumerable을 사용하지 않는 것이 었습니다. 그러나 내가 더 읽었을 때, IEnumerable을 사용하여 반복 처리하고 수정하지 않고 (추가, 제거) 무언가가 필요하다면 완벽하게 받아 들일 수 있다는 것을 깨달았습니다.

+5

은 그것의 고 말했다 누가 안 괜찮아? –

+0

스타일 콥이 그것에 대해 불평 할 것이라고 생각합니다. 나는 왜 확신 할 수 없다. – devrooms

+4

"왜이 컴파일하지 않는가?"라는 질문이 있으면 적어도 컴파일러 오류를 포함 할 수 있습니다. –

답변

13

문제는 클래스의 멤버의 기본 접근성, 이미 개인 그래서 귀하의 코드에 해당한다는 것입니다 : 당신이 게터 또는 세터에 대한 추가 액세스 한정자를 포함 할 때하기 때문에 컴파일에 실패

public class Example 
{ 
    private IEnumerable<int> Ids {get; private set;} 
    private IEnumerable<string> Names {get; private set;} 
} 

그것은 속성의 전반적인 액세스보다 더 제한적이어야합니다. 이 경우는 아닙니다. 당신이 비록 전체 재산 공개를 한 경우

, 그것은 아무런 문제없이 컴파일 :

public class Example 
{ 
    public IEnumerable<int> Ids {get; private set;} 
    public IEnumerable<string> Names {get; private set;} 
} 

을 (즉, 당신은 물론, System.Collections.Generic 네임 스페이스에 대한 using 지시문을 가정합니다.)