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;}
}

Никто никогда не будет путать, что такое перечисление, и каков его экземпляр.