2013-01-23 47 views
1

我有一個類將封裝一個字典來執行一些操作。我想初始化它喜歡:C#泛型:定義只有一種類型爲通用

class DescriptorList<K, Descriptor> 
{ 
    <some code> 
} 

Descriptor是我實現了一個課程,但出於某種原因,編譯犯規承認,並認爲它是一個通用的關鍵字(如「T」)。我如何讓編譯器識別我的類型。

+1

爲什麼你需要這是一個泛型類型參數,如果你知道它是什麼,事先並不會從改變來電者? – Oded

+0

我只想要鑰匙類型是通用的 – Cemre

+0

你可以發佈整個代碼嗎? – daryal

回答

2

如果你只是想關鍵是在你的包裹型通用的,你不需要在類聲明中的類型描述符爲價值。您只需在聲明要包裝的Dictionary實例時指定值類型(描述符)。例如:

class DescriptorList<K> 
{ 
    private Dictionary<K, Descriptor> wrapped = new Dictionary<K, Descriptor>() ; 

    ... 
} 
1

如果您希望爲固定類型的值設置字典併爲鍵設置不同類型,則可以像這樣實現類。

class Descriptor 
{} 

class DescriptorList<K> : Dictionary<K, Descriptor> 
{ 
    <some code> 
} 

或者你可以使用這個,如果你想有固定類型的鍵和不同類型的值的字典。

class Descriptor 
{} 

class DescriptorList<K> : Dictionary<Descriptor, K> 
{ 
    <some code> 
} 
+0

這可能是他想要的(他需要一個從Descriptor派生的類嗎?)。無論如何,當你提供更多細節而不是代碼片段時(哦,順便說一句,他說DescriptorList是一個字典中的_wrapper_)。 –

0

你所要做的是不可能的,你當前的實現。您可以執行以下操作(儘管這只是一種解決方法,取決於您嘗試執行的操作);

public class DescriptorList<K, V> where V : Descriptor 
{   
} 
0

在語法上,Descriptor這裏只是一個通用的參數,如T。如果你不希望它是通用的一部分,只需使用:

class DescriptiorList<K> { ... } 
1

包裝字典

class DescriptorList<K> 
{ 
    private readonly Dictionary<K, Descriptor> wrappedDictionary; 

    // <some code> 
}