什么是类型参数命名准则?

19 .net c# generics naming-conventions

我注意到,除了在Essential C#3.0书中看到,参数通常被定义为TTEntity

例如:

public class Stack<T>
{


}
Run Code Online (Sandbox Code Playgroud)

要么

public class EntityCollection<TEntity>
{


}
Run Code Online (Sandbox Code Playgroud)

你如何决定使用哪个名称?

谢谢

Fre*_*red 36

我从http://referencesource.microsoft.com/dotnet46.zip获取了.NET Framework 4.6源代码.提取它并处理数据以从所有泛型类声明中提取通用参数名称.

注意:我只从通用类中提取通用参数名,只有一个通用参数.因此,这不考虑具有多个通用参数的泛型类.

grep -nohrP "class \w+<T\w*>" | sed -e 's/.*\<//' -e 's/>//' | sort | uniq -cd | sort -bgr
Run Code Online (Sandbox Code Playgroud)

结果:

361 T
 74 TChannel
 51 TKey
 33 TResult
 30 TSource
 28 T_Identifier
 18 TElement
 12 TEntity
 11 TInputOutput
  7 TItem
  6 TLeftKey
  6 TFilterData
  5 T_Query
  4 T_Tile
  4 TInput
  3 TValue
  3 TRow
  3 TOutput
  3 TEventArgs
  3 TDataReader
  3 T1
  2 TWrapper
  2 TVertex
  2 TValidationResult
  2 TSyndicationItem
  2 TSyndicationFeed
  2 TServiceType
  2 TServiceModelExtensionElement
  2 TResultType
  2 TMessage
  2 TLocationValue
  2 TInnerChannel
  2 TextElementType
  2 TException
  2 TEnum
  2 TDuplexChannel
  2 TDelegate
  2 TData
  2 TContract
  2 TConfigurationElement
  2 TBinder
  2 TAttribute
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的努力! (2认同)

Jar*_*Par 30

这是我的一套规则

  • 如果有一个参数,我将其命名为T.
  • 如果有多个参数,我选择一个有意义的名称和T前缀.例如TKey,TValue

对于半官方意见,值得关注该主题的框架设计指南:


gre*_*mac 7

最后,它并不重要.使用有意义的命名约定.

public class MyDictionary<T1, T2>
{ }
Run Code Online (Sandbox Code Playgroud)

可能没那么有用

public class MyDictionary<KeyType, ValueType>
Run Code Online (Sandbox Code Playgroud)

(或TKey,TValue,如果你愿意的话).

如果我正在考虑你的实现并且必须考虑"好的,这个'T3'又是什么东西?" 然后你没有做好.

  • +1,即使它是一个参数,也可能使它有意义. (2认同)