2011-03-26 5 views
0

좋은 아침, 오후 또는 밤,시행 다른 유형 매개 변수

구현하는 경우, 예를 들어, ICollection<KeyValuePair<TKey, TValue>> 또는 IDictionary<TKey, TValue>, 나는 다른 종류로 TKeyTValue을 적용 할 수있는 방법이? typeof(TKey) == typeof(TValue) 때마다 생성자에서 예외를 throw 할 수 있지만 이것이 가장 우아하고 정확한 해결 방법이 아닌 것 같습니다.

대단히 고마워요.

+0

호기심이 ... 왜죠? – digEmAll

+0

나는 보통 이런 코멘트를 삼가고 있지만, 왜 그렇게하고 싶습니까? Generics는 * generic * 기능을 제공합니다. 어디서 조건을 제공 할 수 있습니다. – steinar

+1

예를 들어'TKey'와'TValue'를 얻기 위해 오버로드 된 함수가있을 수 있습니다. 'TKey' =='TValue'의 경우 모호 해집니다. 그런 식으로 함수를 오버로딩하는 것은 좋은 생각이 아닐 수도 있습니다. – CodesInChaos

답변

3

더 좋은 점은 없습니다. . NET에서 당신은 작은 제약 집합으로 제한되어 있으며, 이것들은 제약이 없습니다.

2

생성자에서 확인을 유지하면서 Code Contracts으로 조건을 명시 적으로 만들 수 있습니다.

public class MyDictionary : IDictionary<TKey, TValue> 
{ 
    public MyDictionary() 
    { 
     Contract.Requires(typeof(TKey) != typeof(TValue)); 
    } 
} 
관련 문제