OrderedDictionary과부하 인덱싱 작업 때문에 정수와 인덱싱 N위치에 항목을 얻을 것이다 N,으로 인덱싱하는 동안 Object해당 개체에 풀어서 항목을 검색합니다. OrderedDictionary<int, string>호출 된 을 만들고 myDict항목 (1, "George") 및 (0, "Fred")를 순서대로 추가하려면 myDict[0]"George"또는 "Fred"를 반환 해야 합니까?
이러한 문제는 키 유형에 클래스 제약 조건을 적용하여 해결할 수 있습니다. 반면에 일반 컬렉션의 유용성은 가치 유형을 효율적으로 처리 할 수있는 능력에서 비롯됩니다. 키 유형에 클래스 제약 조건을 적용하면 약간 추한 것처럼 보입니다.
클래스가 CLS를 준수하지 않아도 vb.net과 함께 작동해야한다면 명명 된 인덱스 속성을 사용하는 것이 합리적이었습니다. 따라서 위의 예에서 myDict.ByKey[0]"Fred"를 myDict.BySequence[0]산출하고 "George"를 산출했을 것입니다. 불행히도 C #과 같은 언어는 명명 된 인덱스 속성을 지원하지 않습니다. 하나는 심지어 속성없이 위 구문의 사용을 허용하는 kludged 뭔가를 할 수 있지만, 불행한 결정은 같은 구조의 필드를 포장하는 Point과 Rectangle에 대한 것을 수단을 myDict.ByKey[0] = "Wally"하려면 myDict.ByKey새로운 클래스의 객체를 반환해야합니다. 구조체는 더 효율적이지만 컴파일러는 읽기 전용 구조에 대한 쓰기처럼 보이는 것을 거부합니다 (속성이 속성이 반환 한 구조체를 수정하지는 않더라도)ByKey참조가있는 컬렉션을 수정하십시오.
개인적으로, 나는 삽입 순서를 추적하도록 지정된 사전 같은 객체가 좋은 것이라고 생각합니다. 또한 특정 키와 관련된 키를 쉽게 반환 할 수있는 사전 -ish 객체를 갖고 싶습니다 (예 : 대소 문자를 구분하지 않는 사전이 있고 키가 "GEORGE"인 레코드를 추가 한 경우 KeyValuePair열거에 반환 된 모든 객체 를 검색하지 않고도 사전에 "George"와 관련된 키를 요청할 수 있습니다.
SortedDictionary<TKey, TValue>: msdn.microsoft.com/en-us/library/f7fta44c.aspx