Правильное именование значений перечисления для C # - PullRequest
3 голосов
/ 08 октября 2008

Как вы думаете, это хорошая идея иметь такое перечисление:

enum AvailableSpace {
   Percent10,
   Percent20,
   SqF500,
   SqF600
}

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

РЕДАКТИРОВАТЬ: Это будет использоваться для определения состояния объекта - то есть как свойство только для чтения, чтобы описать состояние объекта. Если мы знаем общее пространство (т. Е. Сам объект его знает), у нас есть возможность выполнить внутреннее преобразование, поэтому у нас либо только процент, либо квадратные футы, либо оба. Аргумент в том, что «оба» не очень хорошая идея.

Выше приведен пример, конечно, но реальная проблема заключается в том, что некоторые поставщики данных отправляют нам итоговые данные (sq.f.) и другие проценты, и моя цель - объединить пользовательский интерфейс. Я могу сделать некоторые приближения, поэтому точные значения будут адаптированы в зависимости от того, насколько точно мы хотим представить информацию.

Вопрос заключается только в семантике имен значений, а не в их содержимом, т. Е. Целесообразно ли указывать процент в (потенциальном) int enum.

Ответы [ 2 ]

8 голосов
/ 08 октября 2008

Ответ : Нет, не рекомендуется использовать перечисления для представления значений. Особенно значения в двух семантически различных шкалах. Вы не должны использовать перечисления для значений.

Причина : Как соотносятся значения enum из двух шкал, например Percent10 и SqF600? Как вы расширяете список значений, которые вы можете представить в своем коде? Как вы делаете сравнение и арифметические операции над этими значениями?

Предложение (не запрашивается, но, тем не менее, здесь оно есть.: -)) : Семантика того, что вы пытаетесь сделать, будет лучше отражена структурой, содержащей два поля - одно для абсолютная площадь и один процент в процентах от этой абсолютной площади. С такой структурой вы можете представлять все, что вы можете представлять перечисленными выше. Например, поставщики данных, которые дают вам абсолютную площадь, представлены в виде структуры с доступной площадью 100%. Поставщики данных, которые дают вам процент, представлены в виде структуры с указанным процентом и абсолютной областью, так что процент этой области является фактической доступной областью, о которой поставщик данных хочет сообщить. Вы получаете «нормализованное» представление данных от обоих типов провайдеров, и вы можете добавить пару операторов, чтобы включить сравнение и арифметические вычисления с экземплярами.

5 голосов
/ 08 октября 2008

Если это вообще возможно, я бы лучше разделил ваш пример на два значения, где ваше перечисление равно «Percent» и «SquareFeet», а второе значение - это квантификатор. Свяжите их вместе в структуре.

Если это позволяет контекст, может быть даже лучше создать два типа обертки «Percent» и «SquareFeet», а затем создать некоторые перегрузки операторов, чтобы вы могли делать такие вещи, как «new SquareFeet (500) + new Percent ( 20);» и исключить использование перечислений.

Обновление: Ваша схема именования была бы уместна, если бы значения были общепризнанными в отрасли терминами, почти до такой степени, что они являются символами. Например, безопасно иметь перечисление, которое содержит значения, такие как «ISO9001», а не два значения (перечисление, содержащее «ISO» и целое число 9001). Также было бы целесообразно иметь перечисление как ниже:

public enum OperatingSystem
{
    Windows95,
    Windows98,
    Windows2000,
    WindowsXP,
    WindowsVista,
    MacOSClassic,
    MacOSXTiger,
    MacOSXLeopard
}

Если термины «Percentage10» и «Sqf500» не являются художественными терминами или четко определены в спецификации, словаре данных и т. Д., То их нецелесообразно использовать в качестве значений в перечислении.

...