C#泛型:仅将一种类型定义为泛型

时间:2013-01-23 13:09:57

标签: c# generics

我有一个类,它将包装一个字典来对它执行一些操作。我试图将它实例化为:

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

Descriptor是我实现的一个类,但由于某种原因,编译器无法识别并认为它是一个通用关键字(如'T')。如何让编译器识别我的类型。

5 个答案:

答案 0 :(得分:2)

如果您只希望密钥在包装类型中是通用的,则在类声明中不需要类型描述符。当您声明要包装的Dictionary实例时,只需要指定值类型(描述符)。例如:

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

   ...
}

答案 1 :(得分:1)

如果您希望字体具有固定类型的值并更改键的类型,则可以像这样实现您的类。

class Descriptor
{}

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

或者你可以使用它,如果你想让键的固定类型的字典和值的类型不同。

class Descriptor
{}

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

答案 2 :(得分:1)

  

包裹字典

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

   //   <some code>
}

答案 3 :(得分:0)

您当前的实施无法实现您的目标。您可以执行以下操作(虽然这只是一种解决方法,取决于您尝试实现的目标);

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

答案 4 :(得分:0)

从语法上讲,Descriptor此处 只是一个通用参数,例如T。如果您不希望它成为通用的一部分,请使用:

class DescriptiorList<K> { ... }