C#字典的命名约定

Shu*_*huo 59 c# naming-conventions

我们如何命名字典变量?

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

我知道我们可以Country为这个例子创建一个类.但是请不要提到这个替代方案,因为我在这里考虑好的命名约定.

Hei*_*nzi 82

ProvincesByCountry
Run Code Online (Sandbox Code Playgroud)

  • 据我所知,这不是一个既定的惯例。对于手头的案例,这似乎是一个很好且简洁的解决方案。 (3认同)
  • 在某些情况下,我们可以使用“Per”而不是“By”。例如:“每个租户的规则” (3认同)
  • 我认为这是因为FooByBar将Map或Dictionary附加到名称冗余.我认为By和To之间的区别在于你将某事物的id/key/field映射到事物本身,而To意味着你将两个相似的复杂对象映射到彼此.如果集合类似于Lookup但只有一个值,那么我将使用By.如果该集合类似于语言词典,那么我将使用To. (2认同)
  • 谢谢你。光滑的解决方案。我害怕以“字典”/“地图”结束它,这很完美。 (2认同)
  • 这来自 sql server 命名约定 FYI,它是集合命名约定的自然参考。其他替代方案是 CountryToProvince,或者字典表示的更明确的关系,例如 ProvinceInCountry、CountryOfProvince 等。最好使用键/值实体的单数形式。 (2认同)

her*_*ter 19

我主要使用其中一个:

  • CountryToStatesDictionary
  • CountryToStatesMap
  • CountryToStatesMapping

  • 像FrenchToEnglish字典. (5认同)

Lou*_*nco 7

我喜欢XtoYMapYFromX.


Tim*_*vis 5

命名始终是上下文的.因此,在这种特定情况下,指定国家/地区映射的某个名称是合适的.

如果这只是一个在更大的上下文中循环然后丢弃的设备,我通常会选择一个短临时类型的var ...

var dict = GetCountryStateMapping();
foreach(var item in dict)
{
  //Something....
}
Run Code Online (Sandbox Code Playgroud)

  • 让我想起了一个IT笑话......"计算机科学中只有2个难题,命名,缓存失效和关闭1个错误." (12认同)
  • 啊,那么在那种情况下你有一个上下文和范围,父类(连同内容)及其生命周期.在这种情况下,命名更容易.正如我所说,命名始终是上下文.在这种情况下,RegionByCountry或StateByCountry或ProvinceByCountry等将是最合适的IMO. (2认同)

Ste*_*lov 5

ProvincesByCountry不够明确,因为这听起来像将国家/地区映射到省份。当访问ProvincesByCountry [“ Germany”]时,我应该假定一个值是一个对象而不是对象列表。

我的个人风格类似:

[Plural of a noun describing the value]By[Singular of a noun describing the key]
Run Code Online (Sandbox Code Playgroud)

但是,如果描述该值的名词本质上为复数形式,那么我将使用后缀数组list,因为英语中您不能真正“复数化”复数形式。我个人始终坚持使用数组,而不管我正在使用的IEnumerableIEnumerable <T>的实际实现是List还是Array或其他任何东西。

就您而言,它变成:

ProvinceArraysByCountry
Run Code Online (Sandbox Code Playgroud)

以科学的精确度告诉它是什么。

如果有字典作为值,我将递归应用此规则。然后,访问顺序与名称中的单词顺序相反。假设您添加了行星:

ProvinceArraysByCountryByPlanet["Earth"]["Germany"][0] = "Bavaria"
ProvinceArraysByCountryByPlanet["Earth"]["Germany"][1] = "Rhineland-Palatinate"
Run Code Online (Sandbox Code Playgroud)

最后是这里的最后一招。如果此类词典映射了对象属性和对象本身,那么我将在关键部分省略描述对象的单词。这是我的意思:

NodesByIndex[node.Index] = node; // - Do
NodesByNodeIndex[node.Index] = node; // - Don't
Run Code Online (Sandbox Code Playgroud)

我无条件使用此模式,因为它完全没有猜测的余地。缺点是有时会生成相当长的名称。但是我不知道如何拥有总是明确但总是简短的名字。您总是必须妥协。这当然是一个品味问题。

当键也是字典时,或者当您拥有字典列表中的字典列表或某些其他疯狂的异国情调时,此模式将不起作用(或至少您会伤脑筋)。但是我不记得有那么多的嵌套,所以我对此感到满意。

  • 正如我在Microsoft的源代码中看到的那样,它们使用`Collection`后缀。所以我会说`ProvinceCollectionsByCountry`或更专业的名称:`ProvinceCollectionsByCountryName`。 (3认同)