19 .net c# generics naming-conventions
我注意到,除了在Essential C#3.0书中看到,参数通常被定义为T或TEntity
例如:
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)
Jar*_*Par 30
这是我的一套规则
对于半官方意见,值得关注该主题的框架设计指南:
最后,它并不重要.使用有意义的命名约定.
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'又是什么东西?" 然后你没有做好.