强制执行不同的类型参数
问题描述:
早上好,下午或晚上,强制执行不同的类型参数
实施时,例如,ICollection<KeyValuePair<TKey, TValue>>
或IDictionary<TKey, TValue>
,有没有什么办法可以强制执行TKey
和TValue
是不同类型的?我知道我可以在构造函数中抛出异常,只要typeof(TKey) == typeof(TValue)
,但这看起来既不是最优雅也不是最正确的解决方案...
非常感谢。
答
我怀疑还有什么更好的。在.net中,你仅限于一小部分内置约束条件,这不在其中。
答
您可以使条件明确Code Contracts,同时保持在构造函数中的检查。
public class MyDictionary : IDictionary<TKey, TValue>
{
public MyDictionary()
{
Contract.Requires(typeof(TKey) != typeof(TValue));
}
}
出于好奇...为什么? – digEmAll 2011-03-26 14:41:08
我通常不喜欢这些评论,但为什么你会想要这样做?泛型可以提供* generic *功能。你可以提供一个where条件。 – steinar 2011-03-26 14:42:30
例如,你可能有一个重载的函数来使用'TKey'和'TValue'。如果'TKey' =='TValue',它将变得模糊不清。以这种方式重载函数可能不是一个好主意。 – CodesInChaos 2011-03-26 14:43:51