Соглашение об именах для словаря C # - PullRequest
58 голосов
/ 02 декабря 2010

Как мы называем переменную словаря?

Скажите, в моем методе у меня есть Dictionary<string, List<string>> dictionary;, где ключи dictionary являются названиями стран, а значения - списками названий провинций / штатов.Как мне переименовать dictionary?

Я знаю, что мы можем создать класс Country для этого примера.Но, пожалуйста, не упоминайте эту альтернативу, потому что я думаю о хорошем соглашении об именах здесь.

Ответы [ 6 ]

79 голосов
/ 02 декабря 2010
ProvincesByCountry
18 голосов
/ 02 декабря 2010

Я использую в основном один из них:

  • CountryToStatesDictionary
  • CountryToStatesMap
  • CountryToStatesMapping
7 голосов
/ 02 декабря 2010

Мне нравится XtoYMap или YFromX.

5 голосов
/ 02 декабря 2010

Именование всегда контекстуально. Так что в данном конкретном случае уместно какое-то имя, указывающее отображение страны на штат.

если это было просто устройство для цикла в более широком контексте и затем отбрасывалось, я обычно просто использую кратковременный тип переменной var вроде ...

var dict = GetCountryStateMapping();
foreach(var item in dict)
{
  //Something....
}
4 голосов
/ 26 июня 2014

ProvincesByCountry не является достаточно явным, поскольку это похоже на сопоставление стран с провинциями один в один.При доступе к ProvincesByCountry ["Germany"] я бы предположил, что одно значение - это объект, а не список объектов.

Мой личный шаблон похож:

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

Однако, если существительное, описывающее значение, является множественным по своей природе, тогда я использую постфикс массивы или списки , так как на английском языке вы не можете действительно "множественно использовать" aво множественном числе.Лично я всегда придерживаюсь массивов , независимо от фактической реализации IEnumerable или IEnumerable , который я использую, будь то Список или Массив или любой другой.

В вашем случае он превращается в:

ProvinceArraysByCountry

Сообщает, что это такое с научной точностью.

Iприменять это правило рекурсивно, если в качестве значений используются словари.Затем порядок доступа меняется в обратном порядке по отношению к словам в имени.Представьте, что вы добавляете планеты:

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

И, наконец, последний маленький штрих здесь.Если такой словарь отображает свойства объекта и сами объекты, то я опускаю слово, описывающее объект, в разделе ключей.Вот что я имею в виду:

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

Я использую этот шаблон безоговорочно, что хорошо, так как он не оставляет абсолютно никаких оснований для догадок.Это порождает довольно длинные имена.Но я понятия не имею, как иметь всегда явные, но всегда короткие имена.Вы всегда должны идти на компромисс.И это, конечно, дело вкуса.

Этот шаблон не работает (или, по крайней мере, вы сломаете свой мозг), когда ключи также являются словарями или когда у вас есть список словарей списков словарей или некоторыхдругие сумасшедшие экзотические вещи.Но я не помню, чтобы у меня было столько уровней вложенности, поэтому я доволен этим.

2 голосов
/ 02 декабря 2010

провинций, ProvinceMap, ProvinceDictionary

Все приходят на ум.Мне нравится провинция.Если это поле члена, я бы добавил префикс «m_», как в «m_provinceMap».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...