2009-07-08 5 views

Répondre

1

Lorsque vous créez une classe générique, vous pouvez donner le nom que vous voulez un type générique. La convention est de le préfixer avec "T". Le motif que je vois souvent est que quand vous avez un seul type générique, il est appelé "T", mais quand vous en avez plus d'un, ils ont des noms explicites (comme TKey et TValue) pour différencier les différents types les types.

2

TKey est le type de la clé; TValue est le type de la valeur.

par exemple

Dictionary<string, int> est calée sur une chaîne et retourne un entier

22

Il est convention utiliser T pour les types génériques (comparables à des "modèles" en C++, etc.).

S'il y a un seul type (List<T>) alors juste T est bien (il n'y a rien d'autre à expliquer); mais s'il y a plusieurs types génériques, le T préfixe le but. Par conséquent TKey est le type générique de la "clé" et TValue de la valeur. Si cela vous aide dans ce cas si vous savez qu'un dictionnaire mappe les clés aux valeurs! L'intellisense vous dira généralement ce que signifie chaque argument de type; par exemple avec Func<T1,T2,TResult>:

  • T1: le type du premier paramètre de la méthode encapsulée par ce délégué.
  • T2: type du second paramètre de la méthode que ce délégué encapsule.
  • TResult: type de la valeur de retour de la méthode que ce délégué encapsule.

(provenant les données de commentaire de type)

0

Ils sont les types de générique. Le capital T signifie type.

List<int> list; 

Dans cet exemple, le T est un int.

0

Un dictionnaire est un magasin de clés/valeurs. Dans Dictionary<TKey,TValue> TKey est le type de la clé et TValue est le type de la valeur.

Il est recommandé d'utiliser une convention de nommage similaire si possible dans vos propres génériques lorsqu'il n'y a pas plus d'un paramètre de type.Sinon, nous obtenons MyGeneric<Q,R,S,T,U,...>

+0

Une classe générique ou une méthode avec autant de paramètres serait une grande "WTF" en elle-même, même si elles étaient correctement nommées :) – Thorarin

0

Il existe une convention pour utiliser T pour indiquer la classe sur laquelle repose votre classe générique (par exemple List<T>). Un dictionnaire est cependant basé sur deux classes, ils ont donc choisi de les distinguer avec le suffixe Key et Value.

Ils auraient pu choisir n'importe quoi - ailleurs dans d'autres scénarios j'ai vu T et U utilisés, et d'autres lettres suivantes (c'est-à-dire V, X etc.) si plus de classes sont nécessaires.

Questions connexes