2008-09-29 4 views
7

일반 IDictionary의 인스턴스를 일반이 아닌 IDictionary으로 변환하고 싶습니다. IDictionary의 새 인스턴스를 만들지 않고도이 작업을 수행 할 수 있습니까? 이 작업을위한 프레임 워크 지원이 있습니까?일반 사전을 열거하지 않고 비 제너릭으로 변환하는 방법은 무엇입니까?

비 IDictionary를 구현하는 클래스에서 일반 IDictionary을 래핑하려고 시도했지만 마크 인 Gravell 솔루션과 함께 일반 ICollection을 일반 텍스트로 변환해야한다는 것을 발견했습니다.

답변

18

모두 콘크리트 구현에 따라 다릅니다. 예를 들어

, 사전 < TKEY, TValue > 구현 모두 일반 IDictionary < TKEY, TValue >과 제네릭이 아닌 IDictionary - 그래서 당신이 사전 < TKEY이있는 경우, TValue > 당신이로 중 하나를 문제없이 사용할 수 있습니다 : 그것이 사실이 아니기 때문에

 Dictionary<int, string> lookup = new Dictionary<int,string>(); 
     IDictionary<int,string> typed = lookup; 
     IDictionary untyped = lookup; 

그러나이 반드시 모든 IDictionary < TKEY를 들어, TValue > imlpementations을 적용하지 않는 IDictionary < TKEY, TValue > : IDictionary. 일반적인 코드를 숙지하고 있다면 현재 사전을 테스트 할 수 있습니다 :

 IDictionary<int,string> typed = ... 
     IDictionary untyped = typed as IDictionary; 
     if(untyped == null) {/* create by enumeration */} 
관련 문제