[英]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.