繁体   English   中英

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

[英]C# Generics: Defining only one type as generic

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

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>
}

包裹一本字典

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

   //   <some code>
}

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

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

在语法上, Descriptor在这里只是一个普通的参数,如T 如果您不希望它成为泛型的一部分,只需使用:

class DescriptiorList<K> { ... }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM