2009-07-23 6 views
0

. 나는 전체 디자인에 대해 완전한 제어권을 가지고있는 다른 불변 구조체의 읽기 전용 컬렉션을 포함하는 .Net에서 변경할 수없는 구조체를 만들고 있습니다. 난 돌연변이가 아닌 Add 메서드가 필요 없다.컬렉션이있는 변경 불가능한 구조체

어떻게해야할까요?

외부 구조체에 내부 구조체가 들어있는 ReadOnlyCollection에 대한 참조를 만들 수 있습니다. 다른 옵션이 있습니까?

답변

3

ReadOnlyCollection은 편도입니다.

컬렉션과 관련하여 수행해야하는 작업에 따라 대신 IEnumerable으로 표시 할 수도 있습니다.

+1

+1 간단한 배열을 사용할 수 있지만 배열을 변경할 수 있습니다. 'Array' 클래스는 배열을 읽기 전용 콜렉션으로 변환하는'AsReadOnly'라는 정적 메쏘드를 가지고 있습니다. 'ReadOnlyCollection'을 반환합니다. 그것과 다른 이유가 없습니다. – jpbochi

+0

@jpbochi : 어떤 작업을 하느냐에 따라 배열을 사용하는 것이 더 좋을 수 있지만, 필드가 완전히 채워질 때까지는 필드에 대한 참조를 저장하지 말고 배열을 수정하거나 코드를 그것을 수정하는 대신 구조체의 메서드 나 속성을 통해 배열 내용에 대한 액세스 만 허용합니다. 이 방법은 ReadOnlyCollection 래퍼를 사용하는 것보다 오버 헤드가 적지 만 구조체를 거치지 않고 배열에 액세스하는 데 사용할 수있는 클래스를 사용자에게 제공 할 수 없다는 단점이 있습니다. 세 번째 접근법 ... – supercat

+0

... 구조체가 배열에 처음 할당 될 IList를 유지하도록 요청할 수 있지만, 요청 된 경우에는 'ReadOnlyCollection'으로 대체 될 수 있습니다. 이것은 많은 경우에 콜렉션 레퍼런스가 동일한'ReadOnlyCollection' 인스턴스에 만족 될 것을 반복하는 요청을 허용하지만, 읽기 전용 구조체 인스턴스가'ReadOnlyCollection'을 요청하면 참조를 캐시 할 수 없다는 경고가 있습니다 . – supercat

관련 문제