早上好,下午或晚上,強制執行不同的類型參數
實施時,例如,ICollection<KeyValuePair<TKey, TValue>>
或IDictionary<TKey, TValue>
,有沒有什麼辦法可以強制執行TKey
和TValue
是不同類型的?我知道我可以在構造函數中拋出異常,只要typeof(TKey) == typeof(TValue)
,但這看起來既不是最優雅也不是最正確的解決方案...
非常感謝。
早上好,下午或晚上,強制執行不同的類型參數
實施時,例如,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