2009-07-08 4 views
15

Die Namen TKey und TValue in einem Wörterbuch verwirren mich. Sind sie aus einem bestimmten Grund mit dieser Konvention benannt oder hätten sie etwas benennen können?Was ist TKey und TValue in einem allgemeinen Wörterbuch?

, d. H., Wenn ich eine generische erstellen, muss ich auch eine Art von Namenskonvention verwenden?

Antwort

1

Präfix Wenn Sie eine generische Klasse erstellen, können Sie einen beliebigen Namen geben, den Sie einen generischen Typ möchten. Die Konvention ist mit "T" vorangestellt. Das Muster, das ich oft sehe, ist, dass, wenn Sie nur einen generischen Typ haben, es "T" heißt, aber wenn Sie mehr als eins haben, haben sie explizite Namen (wie TKey und TValue) um zwischen den verschiedenen zu unterscheiden Arten.

2

TKey ist der Schlüsseltyp; TValue ist der Typ des Werts.

zB

Dictionary<string, int> wird an einer Schnur eingegeben und gibt ein int

22

Es ist KonventionT für generische Typen (vergleichbar mit "Vorlagen" in C++ usw.) zu verwenden.

Wenn es einen einzigen Typ gibt (List<T>) dann ist nur T in Ordnung (es gibt nichts mehr zu erklären); Wenn es jedoch mehrere generische Typen gibt, gibt T dem Zweck den Präfix. Daher ist TKey der generische Typ des "Schlüssels" und TValue des Werts. Hilft in diesem Fall, wenn Sie wissen, dass ein Wörterbuch Schlüssel zu Werten abbildet!

Der IntelliSense wird Ihnen normalerweise sagen, was jedes Argument bedeutet; beispielsweise mit Func<T1,T2,TResult>:

  • T1: Die Art des ersten Parameters der Methode, die dieser Delegat kapselt.
  • T2: Der Typ des zweiten Parameters der Methode, die dieser Delegat einkapselt.
  • TResult: Der Typ des Rückgabewerts der Methode, die dieser Delegat einkapselt.

(entnommen aus dem Kommentardaten des Typs)

0

Sie sind die Typen der generisch. Das Kapital T bedeutet Typ.

List<int> list; 

In diesem Beispiel wird die T ist ein int.

0

Ein Wörterbuch ist ein Schlüssel/Wert-Speicher. In Dictionary<TKey,TValue> ist TKey der Typ des Schlüssels und TValue ist der Typ des Wertes.

Es wird empfohlen, dass Sie eine ähnliche Namenskonvention verwenden, wenn dies in Ihren eigenen Generika möglich ist, wenn es nur einen Typparameter gibt.Andernfalls erhalten wir MyGeneric<Q,R,S,T,U,...>

+0

Eine generische Klasse oder Methode mit so vielen Parametern wäre eine große "WTF", selbst wenn sie richtig benannt wäre :) – Thorarin

0

Es gibt eine Konvention, T zu verwenden, um die Klasse anzugeben, auf der Ihre generische Klasse basiert (z. B. List<T>). Ein Wörterbuch basiert jedoch auf zwei Klassen. Daher haben sie sich dafür entschieden, sie mit dem Suffix "Schlüssel" und "Wert" zu unterscheiden.

Sie könnten alles gewählt haben - woanders in anderen Szenarien habe ich gesehen, T und U verwendet, und andere nachfolgende Buchstaben (d. H. V, X usw.), wenn mehr Klassen benötigt werden.

Verwandte Themen