Рекомендуется ли суффиксы всех перечислений С# с помощью "Enum", чтобы избежать конфликтов имен?

qaru.site/info/35468/... есть интересное обсуждение того, как избежать присвоения перечислений и свойств одинаковым именам, чтобы у вас не было такого кода:

public SaveStatus SaveStatus { get; set; }

Кажется, что принятый ответ предложил использовать "Состояние" для перечисления и "Статус" для свойства:

public SaveStatus SaveState { get; set; }

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

Поскольку эта проблема с именами перечислений является постоянной проблемой, я рассматриваю просто всегда суффикс моих перечислений с "Enum", поэтому я бы получил следующее:

public SaveStatusEnum SaveStatus { get; set; }

SaveStatus = SaveStatusEnum.Succeeded;

Кто-нибудь это делает? Счастлив с этим? Решил эту проблему по-другому?

Ответы

Ответ 1

На странице MSDN для правил присвоения имен собственности:

Рассмотрите возможность создания свойства с тем же именем, что и его базовая тип. Например, если вы объявляете свойство с именем Color, тип свойство должно также быть цветом.

Я бы взял это как "нет":)

Edit:

Если вам не нравится использование полного имени внутри класса, объявляющего свойство, вы можете обойти его:

using SaveStatusEnum = MyNamespace.SaveStatus;
...
SaveStatus = SaveStatusEnum.SomeValue;

Таким образом, вы можете сохранить имя перечисления без суффикса и ограничить странность имен только одним классом.:)

Ответ 2

Использует ли .net Framework Enum в качестве суффикса? Нет. Поэтому я тоже не использую его.

Вместо этого я использую такие слова, как Option (или Options, если это Flags-Enum), Mode или аналогичный.

public SaveStatusMode SaveStatus { get; set; }
public SaveStatusOption SaveStatus { get; set; }
public SaveStatusVariant SaveStatus { get; set; }

Ответ 3

Рекомендации по именованию Microsoft.NET не дают такой рекомендации.

Почему бы вам избежать присвоения имен и свойств одинаковым именам? Это:

public SaveStatus SaveStatus { get; set; }

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

Ответ 4

Суффикс типа используется для некоторых типов классов, таких как классы xxxException и xxxAttribute, но суффиксы широко не используются. Например, класс, реализующий IEnumerable, не называется MyListEnumerableClass, а просто MyList.

Вместо того, чтобы изобретать стандартный суффикс, который загромождает имена, попытайтесь составить имена, которые имеют смысл в конкретной ситуации.

Ответ 5

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

Ответ 6

Я знаю, что мое предложение противоречит соглашениям .NET Naming, но я лично префикс перечислений с "E" и флажками enum с "F" (подобно тому, как мы префикс Interfaces с "I" ). Я действительно не понимаю, почему это не конвенция. Enums/Flags - особый случай, как интерфейсы, которые никогда не изменят свой тип. Он не только дает понять, что это такое, но очень легко вводить intellisense, поскольку префикс будет фильтровать большинство других типов/переменных/и т.д., И вы не будете сталкиваться с этими именованиями.

И это также решит другую проблему, где для примеров в WPF они используют статические классы, такие как перечисления (например, FontWeights), которые имеют предварительно определенные экземпляры типов, но вы не знаете, не ищете ли вы их. Если они просто префикс их "E", все, что вам нужно сделать, это набрать символ, чтобы найти эти специальные статические классы.

Ответ 7

Я рекомендую рекомендации MS. И это всегда уродливое кодирование, чтобы читать что-то вроде "FooEnum" в коде;)