字典中的TKey和TValue这些名字令我困惑。他们是出于某种原因而以该惯例命名,还是他们可以将其命名为什么?
即。如果我创建一个泛型,我是否还必须使用某种命名约定?
答案 0 :(得分:23)
使用T
作为泛型类型约定(与C ++中的“模板”相比)。
如果只有一种类型(List<T>
),那么只需T
就可以了(没有什么可以解释的);但如果有多个泛型类型,T
前缀为目的。因此TKey
是“密钥”的泛型类型,以及值的TValue
。如果您知道字典将键映射到值,则在这种情况下有帮助!
intellisense通常会告诉你每个类型参数的含义;例如Func<T1,T2,TResult>
:
T1
:此委托封装的方法的第一个参数的类型。T2
:此委托封装的方法的第二个参数的类型。TResult
:此委托封装的方法的返回值的类型。(取自类型的评论数据)
答案 1 :(得分:13)
惯例是在泛型中用大写字母T
作为前缀答案 2 :(得分:2)
创建泛型类时,可以为通用类型指定任何名称。惯例是在它前面添加“T”。
我经常看到的模式是,当你只有一个泛型类型时,它被称为“T”,但是当你有多个时,它们有明确的名称(如TKey和TValue)来区分不同的类型
答案 3 :(得分:2)
TKey
是密钥的类型; TValue
是值的类型。
例如
Dictionary<string, int>
键入字符串并返回int
答案 4 :(得分:0)
它们是通用的类型。大写字母T表示类型。
List<int> list;
在此示例中,T
是int
。
答案 5 :(得分:0)
字典是键/值存储。在Dictionary<TKey,TValue>
中,TKey是Key的类型,TValue是值的类型。
如果存在多个类型参数,建议您在自己的泛型中使用类似的命名约定。否则,我们会得到MyGeneric<Q,R,S,T,U,...>
答案 6 :(得分:0)
有一种约定使用T来表示您的泛型类所基于的类(例如List<T>
)。然而,字典基于两个类,因此他们选择使用键和值后缀来区分它们。
他们可以选择任何东西 - 在其他情况下我已经看过T和U使用过,以及其他后续字母(例如V,X等),如果需要更多的类。