2009-07-08 6 views
15

辞書のTKeyとTValueという名前は私を混乱させます。何らかの理由でその大会に名前が付けられているのですか?TKeyとTValueは汎用辞書に含まれていますか?

つまり、ジェネリックを作成する場合は、何らかの名前付け規則も使用する必要がありますか?

答えて

13

大会では、汎用的なクラスを作成するとき、あなたはジェネリック型には任意の名前を付けることができ資本T

Generics best practices

1

とジェネリックタイプの名前の前に付けることです。大会では、 "T"という接頭辞を付けます。

一般的なタイプが1つしかない場合、それは「T」と呼ばれますが、複数ある場合、TKeyとTValueなどの明示的な名前が付いていますタイプ。

2

TKeyはキーの種類です。 TValueは値の型です。

例えば

Dictionary<string, int>は、文字列をキーとし、(などC++での「テンプレート」と同等)ジェネリック型のためTを使用する大会あるint型

22

を返しています。

単一のタイプ(List<T>)がある場合は、Tだけです(これ以上の説明はありません)。複数のジェネリック型がある場合は、Tという接頭辞が付いています。したがって、TKeyは「キー」の総称タイプであり、値のTValueです。この場合、辞書がキーを値にマップすることがわかっている場合は役立ちます。

インテリセンスは通常、それぞれのタイプ - 引数の意味を教えます。 Func<T1,T2,TResult>と例えば:

  • T1:このデリゲートによってカプセル化されるメソッドの最初のパラメータのタイプ。
  • T2:このデリゲートがカプセル化するメソッドの2番目のパラメーターの型です。
  • TResult:このデリゲートがカプセル化するメソッドの戻り値の型。 (タイプのコメントデータから取られた)

0

彼らはジェネリックの種類があります。大文字のTは型を意味します。

List<int> list; 

この例でTintあります。

0

辞書は、キー/値ストアです。 Dictionary<TKey,TValue>では、TKeyはKeyのタイプであり、TValueはValueのタイプです。

1つ以上の型パラメータがある場合は、可能であれば同様の命名規則を使用することをお勧めします。それ以外の場合はMyGeneric<Q,R,S,T,U,...>

+0

多くのパラメータを持つジェネリッククラスまたはメソッドは、正しく名前が付けられていても、それ自体が大きな「WTF」になります。 – Thorarin

0

Tを使用して、ジェネリッククラスのベースとなるクラスを指定することができます(例:List<T>)。ただし、辞書は2つのクラスに基づいているため、キーと値の接尾辞で区別することを選択しました。

もっとクラスが必要な場合は、TとUが使用されている他のシナリオの他の部分(たとえばV、Xなど)を選択できました。

関連する問題