命名约定为C#字典

我们如何命名一个字典variables?

说在我的方法我有Dictionary<string, List<string>> dictionary; ,其中dictionary的键是国家名称,值是省/州名称列表。 我应该如何重命名dictionary

我知道我们可以为这个例子创build一个Country类。 但是请不要提及这个select,因为我在这里想到了很好的命名规则。

 ProvincesByCountry 

我主要使用其中之一:

  • CountryToStatesDictionary
  • CountryToStatesMap
  • CountryToStatesMapping

我喜欢XtoYMapYFromX

命名总是上下文的。 所以在这个特定情况下,指定国家/地区映射的名称是适当的。

如果这只是一个更大的上下文中的循环设备,然后丢弃,我通常只是去一个短暂的typesvariables像…

 var dict = GetCountryStateMapping(); foreach(var item in dict) { //Something.... } 

CountriesByCountry还不够明确,因为它听起来像将国家映射到一对一的省份。 当访问ProvincesByCountry [“德国”]我预计假设一个值是一个对象,而不是一个对象列表。

我的个人模式是相似的:

 [Plural of a noun describing the value]By[Singular of a noun describing the key] 

但是,如果一个描述该值的名词由于其性质而是复数,那么我使用后缀数组列表 ,就像在英语中一样,你不能真正地“复数化”一个复数。 我个人总是坚持数组 ,无论IEnumerableIEnumerable <T>的实际实现,我使用的是List ,或Array或其他。

在你的情况下,它转向:

 ProvinceArraysByCountry 

用科学的精确度来说明是什么

如果有字典作为值,我recursion地应用这个规则。 访问顺序与名称中的单词顺序相反。 想象一下,你添加行星:

 ProvinceArraysByCountryByPlanet["Earth"]["Germany"][0] = "Bavaria" ProvinceArraysByCountryByPlanet["Earth"]["Germany"][1] = "Rhineland-Palatinate" 

最后是这里的最后一笔。 如果这样的字典映射对象属性和对象本身,那么我就省略了描述关键字段中的对象的单词。 这是我的意思:

 NodesByIndex[node.Index] = node; // - Do NodesByNodeIndex[node.Index] = node; // - Don't 

我无条件地使用这种模式,这是好的,因为它没有任何猜测的余地。 Con是有时会产生相当长的名字。 但我不知道如何总是明确,但总是短名。 你总是要妥协。 这当然是一个品味的问题。

这种模式不适用(或至less你会打破你的大脑),当键还是字典,或者当你有字典列表字典或一些其他疯狂的异国情调的东西。 但我不记得有这么多的嵌套层次,所以我很高兴。

省,省地图,省词典

所有想到。 我喜欢省地图我的自我。 如果它是一个成员字段,我会添加一个“m_”前缀,如在“m_provinceMap”中。