Имена TKey и TValue в словаре меня путают. Являются ли они названы с этим соглашением по какой-либо причине или они могли назвать что-нибудь?
то есть. если я создам общий, мне также нужно использовать какое-то соглашение об именах?
Имена TKey и TValue в словаре меня путают. Являются ли они названы с этим соглашением по какой-либо причине или они могли назвать что-нибудь?
то есть. если я создам общий, мне также нужно использовать какое-то соглашение об именах?
Это соглашение для использования T
для общих типов (сравнимо с "шаблонами" на С++ и т.д.).
Если существует один тип (List<T>
), тогда просто T
в порядке (больше нечего объяснять); но если существует несколько типичных типов, T
префикс цели. Следовательно, TKey
- это общий тип "ключа" и TValue
значения. Если это поможет, если вы знаете, что словарь сопоставляет ключи значениям!
Intellisense обычно скажет вам, что означает каждый аргумент типа; например, с помощью Func<T1,T2,TResult>
:
T1
: тип первого параметра метода, который инкапсулирует этот делегат.T2
: тип второго параметра метода, который инкапсулирует этот делегат.TResult
: тип возвращаемого значения метода, который инкапсулирует этот делегат.(взято из данных комментариев типа)
Соглашение заключается в префиксных имен типов в generics с капиталом T
TKey
- тип ключа; TValue
- тип значения.
например,
Dictionary<string, int>
вводится в строку и возвращает int
При создании универсального класса вы можете указать любое имя, которое вы хотите использовать для общего типа. Соглашение состоит в том, чтобы префикс "T".
Шаблон, который я часто вижу, состоит в том, что когда у вас есть только один общий тип, он называется "Т", но когда у вас более одного, у них есть явные имена (например, TKey и TValue), чтобы различаться между разными типами.
Это типы общего. Тип капитала T означает тип.
List<int> list;
В этом примере T
является int
.
Словарь - это хранилище ключей/значений. В Dictionary<TKey,TValue>
TKey - это тип ключа, а TValue - Тип значения.
Рекомендуется использовать аналогичное соглашение об именах, если это возможно, в ваших собственных дженериках, когда существует не более одного параметра типа. В противном случае получим MyGeneric<Q,R,S,T,U,...>
Существует соглашение использовать T для обозначения класса, на котором основан ваш общий класс (например, List<T>
). Однако словарь основан на двух классах, поэтому они решили отличить их от суффикса Key и Value.
Они могли выбрать что угодно - в других сценариях, которые я видел в T и U, и других последующих букв (например, V, X и т.д.), если требуется больше классов.