强制执行不同的类型参数

问题描述:

早上好,下午或晚上,强制执行不同的类型参数

实施时,例如,ICollection<KeyValuePair<TKey, TValue>>IDictionary<TKey, TValue>,有没有什么办法可以强制执行TKeyTValue是不同类型的?我知道我可以在构造函数中抛出异常,只要typeof(TKey) == typeof(TValue),但这看起来既不是最优雅也不是最正确的解决方案...

非常感谢。

+0

出于好奇...为什么? – digEmAll 2011-03-26 14:41:08

+0

我通常不喜欢这些评论,但为什么你会想要这样做?泛型可以提供* generic *功能。你可以提供一个where条件。 – steinar 2011-03-26 14:42:30

+1

例如,你可能有一个重载的函数来使用'TKey'和'TValue'。如果'TKey' =='TValue',它将变得模糊不清。以这种方式重载函数可能不是一个好主意。 – CodesInChaos 2011-03-26 14:43:51

我怀疑还有什么更好的。在.net中,你仅限于一小部分内置约束条件,这不在其中。

您可以使条件明确Code Contracts,同时保持在构造函数中的检查。

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