2011-03-26 56 views
0

早上好,下午或晚上,強制執行不同的類型參數

實施時,例如,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

回答

3

我懷疑還有什麼更好的。在.net中,你僅限於一小部分內置約束條件,這不在其中。

2

您可以使條件明確Code Contracts,同時保持在構造函數中的檢查。

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