2011-03-16 4 views
2

나는 특정 키를 가지고있는 사전을 가지고있는 클래스를 가지고있다. 그러나 가치는 일반적이어야합니다. 같은일반 사전을 만드는 방법은 무엇입니까?

뭔가 :

private Dictionary<String,TValue> _Dictionary; 

는 그러나 TValue 발견되지 않는 (obvesly)하지만 다른 무엇 난에 넣어해야합니까? 나는 IList에 대한 해결책을 찾았지만, 단지 하나를 추가하고 싶습니다. 일반 객체.

+0

어디서 사용 되나요? –

답변

2

그래서 일반적인 사전을 원하십니까? 미리 정의 된 클래스를 사용하십시오.

public Dictionary<int, string> _dictionary = new Dictionary<int, string>(); 

그러면 정수형 키와 문자열 값이있는 사전을 얻을 수 있습니다. 변수 중 하나만 사용하여 사전이 필요한 경우 사전을 상속하여 자신의 유형을 만들 수 있습니다.

public class KeyTypeConstantDictionary<T> : Dictionary<int, T> 
{ 
} 

그럼 그렇게처럼 사용 :
KeyTypeConstantDictionary<string> x = new KeyTypeConstantDictonary<string>(); 
// Equivalent to Dictionary<int, string>() 
KeyTypeConstantDictionary<SomeObject> x = new KeyTypeConstantDictonary<SomeObject>(); 
// Equivalent to Dictionary<int, SomeObject>() 

가 잘하면 내가 제대로 질문을 이해했다.

2

제네릭 유형 내에서 사용하는 경우 Tejs answer이 적합합니다.

private Dictionary<string, object> _dictionary; 

이 뜻 : 당신은 그냥 키의 고정 된 형식의 사전을 만들려고 노력하고 있지만 이는 어떤 값을 저장할 수있는 경우

그러나, 하나의 옵션은 당신의 가치를 System.Object을 사용하는 것입니다 값에 개체를 할당 할 수 있습니다. 그러나 이것은 유형 안전성을 잃어 버리고 객체의 박스를 해제하고 올바르게 변환해야 할 필요가 있으므로 잠재적으로 위험합니다.

+0

게다가 값에 대한 객체 유형을 사용하면 System.Collections.Hashtable보다 훨씬 효율적입니다! = D – Tejs

+0

@Tejs : 목표가 무엇인지에 따라 달라집니다 - 가치에 무엇을 저장할 계획입니까? 그건 우리가 최선의 선택이 실제로 무엇인지 결정하는 데 도움이 될 것입니다 ... –

관련 문제