我有一個類將封裝一個字典來執行一些操作。我想初始化它喜歡:C#泛型:定義只有一種類型爲通用
class DescriptorList<K, Descriptor>
{
<some code>
}
Descriptor
是我實現了一個課程,但出於某種原因,編譯犯規承認,並認爲它是一個通用的關鍵字(如「T」)。我如何讓編譯器識別我的類型。
我有一個類將封裝一個字典來執行一些操作。我想初始化它喜歡:C#泛型:定義只有一種類型爲通用
class DescriptorList<K, Descriptor>
{
<some code>
}
Descriptor
是我實現了一個課程,但出於某種原因,編譯犯規承認,並認爲它是一個通用的關鍵字(如「T」)。我如何讓編譯器識別我的類型。
如果你只是想關鍵是在你的包裹型通用的,你不需要在類聲明中的類型描述符爲價值。您只需在聲明要包裝的Dictionary實例時指定值類型(描述符)。例如:
class DescriptorList<K>
{
private Dictionary<K, Descriptor> wrapped = new Dictionary<K, Descriptor>() ;
...
}
如果您希望爲固定類型的值設置字典併爲鍵設置不同類型,則可以像這樣實現類。
class Descriptor
{}
class DescriptorList<K> : Dictionary<K, Descriptor>
{
<some code>
}
或者你可以使用這個,如果你想有固定類型的鍵和不同類型的值的字典。
class Descriptor
{}
class DescriptorList<K> : Dictionary<Descriptor, K>
{
<some code>
}
這可能是他想要的(他需要一個從Descriptor派生的類嗎?)。無論如何,當你提供更多細節而不是代碼片段時(哦,順便說一句,他說DescriptorList是一個字典中的_wrapper_)。 –
你所要做的是不可能的,你當前的實現。您可以執行以下操作(儘管這只是一種解決方法,取決於您嘗試執行的操作);
public class DescriptorList<K, V> where V : Descriptor
{
}
在語法上,Descriptor
這裏是只是一個通用的參數,如T
。如果你不希望它是通用的一部分,只需使用:
class DescriptiorList<K> { ... }
將包裝字典
class DescriptorList<K>
{
private readonly Dictionary<K, Descriptor> wrappedDictionary;
// <some code>
}
爲什麼你需要這是一個泛型類型參數,如果你知道它是什麼,事先並不會從改變來電者? – Oded
我只想要鑰匙類型是通用的 – Cemre
你可以發佈整個代碼嗎? – daryal