2009-07-08 13 views
15

Los nombres TKey y TValue en un diccionario me están confundiendo. ¿Han sido nombrados con esa convención por alguna razón o podrían haberlo nombrado?¿Qué es TKey y TValue en un diccionario genérico?

es decir, si creo un genérico, ¿tengo que utilizar algún tipo de convención de nomenclatura también?

Respuesta

13

La convención es el prefijo nombres de los tipos de medicamentos genéricos con una T mayúscula

Generics best practices

1

Cuando se crea una clase genérica, se puede dar cualquier nombre que desea un tipo genérico. La convención es prefijar con "T".

El patrón que veo a menudo es que cuando solo tienes un tipo genérico, se llama "T", pero cuando tienes más de uno, tienen nombres explícitos (como TKey y TValue) para diferenciar entre los diferentes tipos.

2

TKey es el tipo de clave; TValue es el tipo de valor.

por ejemplo

Dictionary<string, int> está enchavetado en una cadena y devuelve un int

22

Es convención utilizar T para tipos genéricos (comparable con "plantillas" en C++, etc).

Si hay un solo tipo (List<T>), entonces solo T está bien (no hay nada más que explicar); pero si hay varios tipos genéricos, el T tiene el mismo propósito. Por lo tanto, TKey es el tipo genérico de la "clave" y TValue del valor. ¡Si ayuda en este caso, si sabe que un diccionario mapea las claves de los valores!

El intellisense generalmente le dirá lo que significa cada argumento de tipo; por ejemplo, con Func<T1,T2,TResult>:

  • T1: El tipo del primer parámetro del método que este delegado encapsula.
  • T2: El tipo del segundo parámetro del método que este delegado encapsula.
  • TResult: El tipo de valor de retorno del método que este delegado encapsula.

(tomado de datos de comentarios del tipo)

0

Ellos son los tipos de los genéricos. La capital T significa tipo.

List<int> list; 

En este ejemplo el T es un int.

0

Un diccionario es un almacén de claves/valores. En Dictionary<TKey,TValue> TKey es el tipo de clave, y TValue es el tipo del valor.

Se recomienda que use una convención de nomenclatura similar si es posible en sus propios genéricos cuando no hay más de un parámetro de tipo.De lo contrario, obtenemos MyGeneric<Q,R,S,T,U,...>

+0

Una clase o método genérico con tantos parámetros sería una gran "WTF" por sí mismo, incluso si se llamaran correctamente :) – Thorarin

0

Existe una convención para usar T para indicar la clase en la que se basa su clase genérica (por ejemplo, List<T>). Sin embargo, un diccionario se basa en dos clases, por lo que optaron por distinguirlos con el sufijo de clave y valor.

Podrían haber elegido cualquier cosa, en otros lugares en otros escenarios he visto utilizar T y U, y otras letras posteriores (es decir, V, X, etc.) si se necesitan más clases.

Cuestiones relacionadas