코드 안정성 및 코드 가독성/시각적 영향에 대한 내부 사전 인스턴스 (C#)에 대한 참조를 반환하는 세 가지 방법을 고려하고 있습니다.C#을 사용하여 사전 참조를 안전하게 반환했습니다.
다음 세 가지 방법으로 범위를 좁혔지만 더 좋은 제안이 있습니다. 현재 나는 여분의 보일러 판없이 안전의 최상의 균형으로서 # 3을 선호합니다.
1)
은 이제까지 ReadOnlyDictionary 클래스 탈출시키는 내부 사전을 래핑하는 두 번째 ReadOnlyDictionary 인스턴스를 사용 이2) IReadOnlyDictionary로 사전 인스턴스를 돌려줍니다,하지만 개주하는 것은있을 수 것 옵션 # 1 또는 # 3만큼 안전하지 않게 수정되었습니다.
3) 복귀 Dictionary.ToImmutableDictionary()는 리턴 된 객체가 내부 사전 불변 도면이다 있도록 이것이 높은 초래 모든 호출에 대한 새로운 복사본을 만들더라도, 포함하는 클래스 탈출 ImmutableDictionary로서 비용, 작은 괜찮은 사전 (광산 있습니다)으로 잘되어야합니다.
private readonly Dictionary<string, string> innerDictionary = new Dictionary<string, string>();
// Only required for Example #1
private readonly IReadOnlyDictionary<string, string> readonlyInnerDictionary;
public ExampleClass() {
// Only required for Example #1
readonlyInnerDictionary = new ReadOnlyDictionary<string, string>(innerDictionary);
}
public IReadOnlyDictionary<string, string> GetExampleOne() {
// Requires a second dictionary which is more boiler plate but the object being returned is truly readonly
return readonlyInnerDictionary;
}
public IReadOnlyDictionary<string, string> GetExampleTwo() {
// Requires InnerDictionary be defined as Dictionary (Not IDictionary) but doesn't require the second dictionary be defined
// which is less boiler plate, but the object returned could be re-cast to it's mutable form meaning it's not truly mutation safe.
return innerDictionary;
}
public ImmutableDictionary<string, string> GetExampleThree() {
// Truly immutable object returned, but a new instance is built for every call; fortunately all of my dictionaries are small (containing at most 9 keys)
return innerDictionary.ToImmutableDictionary();
}
@Syntax 문제를 해결 했습니까? 원한다면 더 자세한 정보를 공유 할 수 있습니다. –
아더 (Arthur)의 연기로 불편을 끼쳐 드려 죄송합니다. 귀하의 의견은 토론을 진행하는 데 매우 도움이되었지만, 친구와 함께 더 논의한 후에 더 많은 것을 선호하는 또 다른 해결책을 발견했습니다. 관심있는 사람은 내 질문에 대한 답변으로 제공하고 받아 들인 것으로 표시했습니다. – Syntax
아무 문제 없지만, 음, 스레드 안전을 원한다고 명시하지 않았고, 심지어 래핑중인 사전을 노출시키지 않으면 ReadOnlyDictionary는 스레드로부터 안전합니다. –