Enum Naming Convention - множественное число
Я задаю этот вопрос, несмотря на то, что прочитал подобный, но не совсем то, что я хочу в соглашении об именах С# для перечисления и свойства соответствия
Я обнаружил, что у меня есть тенденция называть перечисления во множественном числе, а затем использовать их как сингулярные, например:
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;}
}
Дополнительная информация:
Возможно, мой вопрос был недостаточно ясен. Мне часто приходится много думать, называя переменные моих определенных типов перечислений. Я знаю наилучшую практику, но это не помогает облегчить мою работу по присвоению имен этим переменным.
Я не могу выставить все свои свойства перечисления (например, "Статус" ) как "MyStatus".
Мой вопрос: может ли кто-нибудь найти потенциальную проблему с моим соглашением, описанным выше? Это не о лучшей практике.
Вопрос перефразировать:
Ну, я думаю, я должен задать вопрос таким образом: может ли кто-нибудь выйти из общего универсального способа называть тип перечисления таким образом, чтобы при использовании имя "экземпляр enum" было бы довольно простым?
Ответы
Ответ 1
Корпорация Майкрософт рекомендует использовать сингулярное значение для Enum
, если только Enum
не представляет битовых полей (используйте FlagsAttribute
). См. Соглашения об именах типов перечислений (подмножество Microsoft Руководство по назначению).
Чтобы ответить на ваше разъяснение, я не вижу ничего плохого в любом из следующих действий:
public enum OrderStatus { Pending, Fulfilled, Error };
public class SomeClass {
public OrderStatus OrderStatus { get; set; }
}
или
public enum OrderStatus { Pending, Fulfilled, Error };
public class SomeClass {
public OrderStatus Status { get; set; }
}
Ответ 2
Я начал перечислять перечисления во множественном числе, но с тех пор изменился на единицу. Просто кажется, что имеет смысл в контексте того, где они используются.
enum Status { Unknown = 0, Incomplete, Ready }
Status myStatus = Status.Ready;
Сравнить с:
Statuses myStatus = Statuses.Ready;
Я нахожу, что единственная форма звучит более естественно в контексте. Мы согласны с тем, что при объявлении перечисления, которое происходит в одном месте, мы думаем: "Это группа ударов", но при использовании этого, по-видимому, во многих местах, мы думаем: "Это одно,.
Ответ 3
Ситуация никогда не применяется для множественного числа.
An enum
показывает атрибут того или другого. Я приведу пример:
enum Humour
{
Irony,
Sarcasm,
Slapstick,
Nothing
}
У вас может быть один тип, но попробуйте подумать об этом в множественном, а не в множественном числе:
Humour.Irony | Humour.Sarcasm
Вместо
Humours { Irony, Sarcasm }
У вас есть чувство юмора, у вас нет чувства юмора.
Ответ 4
В общем, рекомендация по лучшей практике является единственной, за исключением тех перечислений, которые прикреплены к ним атрибутом [Flags] (и которые поэтому могут содержать битовые поля), которые должны быть множественными.
После прочтения отредактированного вопроса у меня возникает ощущение, что вы можете думать, что имя свойства или имя переменной должно отличаться от имени типа перечисления... Это не так. Следующее прекрасно...
public enum Status { New, Edited, Approved, Cancelled, Closed }
public class Order
{
private Status stat;
public Status Status
{
get { return stat; }
set { stat = value; }
}
}
Ответ 5
Лучшая практика - используйте единственную. У вас есть список элементов, составляющих Enum. Использование элемента в списке кажется странным, когда вы говорите Versions.1_0
. Имеет смысл сказать Version.1_0
, поскольку существует только одна версия 1_0.
Ответ 6
Немного поздно...
Там важная разница между вашим вопросом и тем, что вы упомянули (о котором я просил; -):
Вы помещаете определение перечисления из класса, которое позволяет иметь одно и то же имя для перечисления и свойства:
public enum EntityType {
Type1, Type2
}
public class SomeClass {
public EntityType EntityType {get; set;} // This is legal
}
В этом случае я буду следовать рекомендациям MS и использовать уникальное имя для перечисления (множественное число для флагов). Это самое простое решение.
Моя проблема (в другом вопросе) заключается в том, когда перечисление определено в области действия класса, предотвращая использование свойства, названного точно после перечисления.
Ответ 7
Если вы пытаетесь написать простой, но запрещенный код следующим образом:
public class Person
{
public enum Gender
{
Male,
Female
}
//Won't compile: auto-property has same name as enum
public Gender Gender { get; set; }
}
Ваши варианты:
-
Игнорируйте рекомендацию MS и используйте префикс или суффикс для имени перечисления:
public class Person
{
public enum GenderEnum
{
Male,
Female
}
public GenderEnum Gender { get; set; }
}
-
Переместите определение перечисления вне класса, желательно в другой класс. Ниже приведено простое решение:
public class Characteristics
{
public enum Gender
{
Male,
Female
}
}
public class Person
{
public Characteristics.Gender Gender { get; set; }
}
Ответ 8
В другом потоке Соглашение об именовании С# для свойства перечисления и соответствия кто-то указал, что я думаю, это очень хорошая идея:
"Я знаю, что мое предложение противоречит соглашениям об именах .NET, но я лично префикс перечислений с" E "и флажками enum с" F "(подобно тому, как мы префикс Interfaces с" я ").
Ответ 9
Это одно из немногих мест, в которых я не согласен с конвенцией, чтобы идти против этого. TBH, я ненавижу, что определение перечисления и его экземпляр может иметь одно и то же имя. Я по умолчанию поставил все свои Enums на "Enum", потому что он ясно дал понять, что контекст этого в любом использовании. IMO делает код более читаемым.
public enum PersonTypesEnum {
smart,
sad,
funny,
angry
}
public class Person {
public PersonTypesEnum PersonType {get; set;}
}
Никто никогда не будет путать, что такое перечисление, и каков его экземпляр.