Я задаю этот вопрос, несмотря на то, что я прочитал похожее, но не совсем то, что я хочу в соглашении об именовании C # для enum и соответствующего свойства
Я обнаружил, что имею тенденцию называть enums во множественном числе, а затем использовать их как единственное число, например:
public enum EntityTypes {
Type1, Type2
}
public class SomeClass {
/*
some codes
*/
public EntityTypes EntityType {get; set;}
}
Конечно, это работает, и это мой стиль, но может ли кто-нибудь найти потенциальную проблему с таким соглашением? У меня есть "уродливое" наименование со словом "Статус", хотя:
public enum OrderStatuses {
Pending, Fulfilled, Error, Blah, Blah
}
public class SomeClass {
/*
some codes
*/
public OrderStatuses OrderStatus {get; set;}
}
Дополнительная информация: Может быть, мой вопрос не был достаточно ясен. Мне часто приходится задумываться над именами переменных моих определенных типов перечислений. Я знаю лучшую практику, но это не помогает облегчить мою работу по именованию этих переменных.
Я не могу выставить все свои свойства перечисления (скажем, «Status») как «MyStatus».
Мой вопрос: может ли кто-нибудь найти потенциальную проблему с моим соглашением, описанным выше? Это НЕ о лучшей практике.
Перефразировать вопрос:
Ну, я думаю, мне следует задать вопрос следующим образом: может ли кто-нибудь изобрести хороший общий способ именования типа enum, чтобы при использовании имя enum 'instance' было довольно простым?
Ответы:
Microsoft рекомендует использовать единственное число для
Enum
s, если они неEnum
представляют битовые поля (используйтеFlagsAttribute
также). См. Соглашения об именовании типов перечисления (часть Руководства Microsoft по именованию ).Чтобы ответить на ваши разъяснения, я не вижу ничего плохого ни в одном из следующего:
или
источник
OrderStatus == OrderStatus.Pending
есть распознается как переменная слева, а затем перечисление справаЯ начал называть перечисления во множественном числе, но с тех пор изменился на единственное число. Просто, кажется, имеет больше смысла в контексте того, где они используются.
Сравнить с:
Я считаю, что форма единственного числа звучит более естественно в контексте. Мы согласны с тем, что при объявлении перечисления, которое происходит в одном месте, мы думаем «это группа whatevers», но при использовании этого, предположительно во многих местах, мы думаем, что «это одно из всех» ,
источник
0
для неизвестного значения, таким образом, неинициализированная переменная по умолчаниюUnknown
.[Flags]
атрибут к своему примеру? Не имеет смысла иметь статус «Неполный» и «Готов». Если бы вы имелиenum [Flags]Steps { First, Second, Third }
, вы бы действительно назвали свою переменнуюcompletedStep
?Ситуация никогда не относится к множественному числу.
An
enum
показывает атрибут того или иного. Я приведу пример:Вы можете иметь один тип, но попробуйте думать об этом во множественном числе, а не во множественном числе:
Humour.Irony | Humour.Sarcasm
Скорее, чем
Humours { Irony, Sarcasm }
У вас есть чувство юмора, у вас нет чувства юмора.
источник
Humours
содержащуюHumours.Irony | Huomours.Sarcasm
??В общем, рекомендация передовой практики является единственной, за исключением тех перечислений, к которым прикреплен атрибут [Flags] (и, следовательно, которые могут содержать битовые поля), которые должны быть во множественном числе.
Прочитав ваш отредактированный вопрос, я чувствую, что вы можете подумать, что имя свойства или имя переменной должно отличаться от имени типа enum ... Это не так. Следующее совершенно нормально ...
источник
public Color Color { get {...} set {...} }
Это одно из немногих мест, где я не согласен с конвенцией настолько, чтобы пойти против нее. Я ненавижу, что определение перечисления и его экземпляра могут иметь одно и то же имя. Я постфиксирую все свои Enums с помощью «Enum» специально, потому что он проясняет, каков его контекст в любом данном использовании. ИМО делает код намного более читабельным.
Никто никогда не будет путать, что такое enum и каков его пример.
источник
Enum
? Это не так, как будто автор предлагает постфиксировать все переменные с их типом. Автор также имеет гораздо более сильный случай, учитывая, что причина указана, тогда как M $ дает нулевое обоснование.Если вы пытаетесь написать простой, но запрещенный код, подобный этому:
Ваши варианты:
Игнорируйте рекомендацию MS и используйте префикс или суффикс в имени перечисления:
Переместите определение enum за пределы класса, предпочтительно в другой класс. Вот простое решение выше:
источник
enum
а затем вкладывать их в еще один класс, если это вызывает проблемы?Gender
и enum name какSex
. Итакisac.Gender = Sex.Male
..Лучшая практика - использовать единственное число. У вас есть список предметов, которые составляют Enum. Использование элемента в списке звучит странно, когда вы говорите
Versions.1_0
. Это имеет больше смысла,Version.1_0
так как существует только одна версия 1_0.источник
Приходит немного поздно ...
Есть важное различие между вашим вопросом и тем, который вы упомянули (который я задал ;-):
Вы помещаете определение enum из класса, что позволяет вам иметь одно и то же имя для enum и свойства:
В этом случае я следовал бы указаниям MS и использовал бы единственное имя для enum (множественное число для флагов). Это, вероятно, самое простое решение.
Моя проблема (в другом вопросе ) заключается в том, что enum определен в области видимости класса, предотвращая использование свойства, названного точно в честь enum.
источник
В другом потоке C # именования enum и соответствия свойств кто-то указал на то, что я считаю очень хорошей идеей:
«Я знаю, что мое предложение идет вразрез с соглашениями об именах .NET, но я лично префикс enum с« E », а флаги enum с« F »(аналогично тому, как мы префиксируем интерфейсы с« I »)».
источник