1

辞書をラップして操作を実行するクラスがあります。私はそれを次のようにインスタンス化しようとしています:

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

Descriptorは私が実装したクラスですが、何らかの理由でコンパイラはそれを認識せず、一般的なキーワード (「T」など) と見なします。コンパイラに自分の型を認識させるにはどうすればよいですか。

4

5 に答える 5

2

キーをラッピング型でジェネリックにするだけの場合は、値のクラス宣言に型記述子は必要ありません。ラップする Dictionary インスタンスを宣言するときは、値の型 (記述子) のみを指定する必要があります。例えば:

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

   ...
}
于 2013-01-23T13:15:00.790 に答える
1

値の型が固定され、キーの型が異なる辞書が必要な場合は、このようにクラスを実装できます。

class Descriptor
{}

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

または、キーの固定タイプと値のタイプが異なる辞書が必要な場合は、これを使用できます。

class Descriptor
{}

class DescriptorList<K> : Dictionary<Descriptor, K>
{
     <some code>
}
于 2013-01-23T13:11:57.763 に答える
1

辞書をラップします

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

   //   <some code>
}
于 2013-01-23T13:16:08.313 に答える
0

あなたがしようとしていることは、現在の実装では不可能です。次のことを行うことができます (ただし、これは単なる回避策であり、何を達成しようとしているかによって異なります)。

public class DescriptorList<K, V> where V : Descriptor
{        
}
于 2013-01-23T13:14:47.723 に答える
0

構文的には、ここDescriptorT. ジェネリックの一部にしたくない場合は、次を使用してください。

class DescriptiorList<K> { ... }
于 2013-01-23T13:14:51.207 に答える