通用字典中的TKey和TValue是什么?

时间:2009-07-08 13:21:06

标签: c# generics

字典中的TKey和TValue这些名字令我困惑。他们是出于某种原因而以该惯例命名,还是他们可以将其命名为什么?

即。如果我创建一个泛型,我是否还必须使用某种命名约定?

7 个答案:

答案 0 :(得分:23)

使用T作为泛型类型约定(与C ++中的“模板”相比)。

如果只有一种类型(List<T>),那么只需T就可以了(没有什么可以解释的);但如果有多个泛型类型,T前缀为目的。因此TKey是“密钥”的泛型类型,以及值的TValue。如果您知道字典将键映射到值,则在这种情况下有帮助!

intellisense通常会告诉你每个类型参数的含义;例如Func<T1,T2,TResult>

  • T1:此委托封装的方法的第一个参数的类型。
  • T2:此委托封装的方法的第二个参数的类型。
  • TResult:此委托封装的方法的返回值的类型。

(取自类型的评论数据)

答案 1 :(得分:13)

惯例是在泛型中用大写字母T

作为前缀

Generics best practices

答案 2 :(得分:2)

创建泛型类时,可以为通用类型指定任何名称。惯例是在它前面添加“T”。

我经常看到的模式是,当你只有一个泛型类型时,它被称为“T”,但是当你有多个时,它们有明确的名称(如TKey和TValue)来区分不同的类型

答案 3 :(得分:2)

TKey是密钥的类型; TValue是值的类型。

例如

Dictionary<string, int>键入字符串并返回int

答案 4 :(得分:0)

它们是通用的类型。大写字母T表示类型。

List<int> list;

在此示例中,Tint

答案 5 :(得分:0)

字典是键/值存储。在Dictionary<TKey,TValue>中,TKey是Key的类型,TValue是值的类型。

如果存在多个类型参数,建议您在自己的泛型中使用类似的命名约定。否则,我们会得到MyGeneric<Q,R,S,T,U,...>

答案 6 :(得分:0)

有一种约定使用T来表示您的泛型类所基于的类(例如List<T>)。然而,字典基于两个类,因此他们选择使用键和值后缀来区分它们。

他们可以选择任何东西 - 在其他情况下我已经看过T和U使用过,以及其他后续字母(例如V,X等),如果需要更多的类。