我们如何命名字典变量?
假设在我的方法中我有
Dictionary<string, List<string>> dictionary;
,其中dictionary
的键是国家/地区名称,值是省/州名称列表。我该如何重命名dictionary
?
我知道我们可以为此示例创建一个
Country
类。但请不要提及这个替代方案,因为我在这里考虑良好的命名约定。
ProvincesByCountry
我主要使用其中之一:
ProvincesByCountry不够明确,因为这听起来像是将国家/地区与省份一一对应。当访问 ProvincesByCountry["Germany"] 时,我预计会假设一个值是一个对象而不是对象列表。
我个人的模式是类似的:
[Plural of a noun describing the value]By[Singular of a noun describing the key]
但是,如果描述该值的名词本质上是复数,那么我使用后缀 arrays 或 lists,因为在英语中你不能真正“复数”复数。我个人总是坚持使用arrays,无论我使用的IEnumerable或IEnumerable< T>的实际实现如何,无论是List,还是Array或其他。
在你的情况下,它变成:
ProvinceArraysByCountry
以科学精确的方式讲述它是什么。
如果有字典作为值,我会递归地应用此规则。然后,访问顺序与名称中的单词顺序相反。想象一下您添加行星:
ProvinceArraysByCountryByPlanet["Earth"]["Germany"][0] = "Bavaria"
ProvinceArraysByCountryByPlanet["Earth"]["Germany"][1] = "Rhineland-Palatinate"
最后最后一点。如果这样的字典映射对象属性和对象本身,那么我会在关键部分中省略描述对象的单词。这就是我的意思:
NodesByIndex[node.Index] = node; // - Do
NodesByNodeIndex[node.Index] = node; // - Don't
我无条件地使用这种模式,这很好,因为它绝对没有留下猜测的空间。缺点是它有时会生成相当长的名称。但我不知道如何拥有始终明确但始终简短的名称。你总是必须妥协。这当然是一个品味问题。
当键也是字典或者当你有字典列表的字典列表或其他一些疯狂的异国情调的东西时,这种模式不起作用(或者至少你会打破你的大脑)。但我不记得有那么多级别的嵌套,所以我对此很满意。
我喜欢
XtoYMap
或YFromX
。
命名始终与上下文相关。因此,在这种特定情况下,指定国家/地区到州的映射的名称是合适的。
如果这只是一个在更大的上下文中循环的设备然后被丢弃,我通常只使用一个短的临时类型变量,例如......
var dict = GetCountryStateMapping();
foreach(var item in dict)
{
//Something....
}
省份、省份地图、省份词典
全都想到了。我喜欢我自己的省份地图。如果它是成员字段,我会添加“m_”前缀,如“m_provinceMap”。