Использование перечислений в качестве индикаторов состояния, возвращаемых в C # - PullRequest
3 голосов
/ 07 марта 2009

Просто интересно, каково общее мнение о возвращении перечислений из методов, указывающих статус. Понятие возврата кодов (целых) довольно врожденное в программировании старых школ (C), но мне интересно, изменилась ли методология указания статуса.

спасибо

Редактировать: Я знаю, что перечисления в основном int значения. Я спрашиваю о чистой практике, когда методы начинают разбрасывать коды состояния (будь то перечисления или целые числа), чтобы указывать состояния в целом. Это похоже на хорошую практику, но мне было интересно, есть ли какие-либо негативные чувства по поводу этой идеи.

Я бы всегда выбирал enum вместо int для кода состояния.

Ответы [ 7 ]

7 голосов
/ 07 марта 2009

Если вы возвращаете перечисления для обозначения ошибок, а не для исключения, вы, конечно, находитесь в состоянии греха.

Действительно ли абоненты интересуются состоянием чего-либо? Я обычно обнаруживал подобные вещи в библиотеках функций в стиле C, где нет объектов для представления состояния. Это зависит от того, что вы пытаетесь сделать, но если вы (скажем) создаете код для управления коммуникационными сокетами, я настоятельно рекомендую обернуть их в классы и позволить клиентскому коду определять их состояние через свойства, а не как результат Метод Open ().

3 голосов
/ 07 марта 2009

если все, что вам нужно, это возвращаемый статус, тогда перечисление - это гораздо лучший способ перейти по сравнению с просто int по ряду причин, это требует согласованности в отношении того, что означает, что вам не нужно помнить, какой код возврата 1 значит, сделать ваш код гораздо более понятным.

1 голос
/ 07 марта 2009

Просто подумайте вслух, но почему бы просто не вернуть объект (класс), тип, который будет зависеть от того, как вам нужно его использовать. Например, один класс может просто содержать строку сообщения, в то время как другой класс может содержать ряд записей с обновленным целым числом.

1 голос
/ 07 марта 2009

Возвращать необработанные целые числа (для статуса и тому подобное) и даже не скрывать их числовую природу от констант (или если язык не поддерживает реальные константы, тогда переменные, которые по соглашению рассматриваются как константы), является очень плохой практикой даже на языках старой школы, таких как C. Это источник множества ошибок и бесконечных головных болей.

Кроме того, перечисления в стиле C # обеспечивают (некоторую) безопасность типов и занимают меньше места для всех видов ошибок и ошибок. Вы обязательно должны их использовать. Так что это действительно лучше, чем возвращать целое число, а затем сравнивать его с целочисленной константой. Если язык предоставляет функцию usefule, почему бы не использовать ее?

1 голос
/ 07 марта 2009

Поскольку enum в основном просто int, он будет работать просто отлично. Вы получаете дополнительный бонус от intellisense.

Предполагается, что вы хотите узнать статус вызова функции. Если вы ищете системный / общий статус, вы можете представить его как событие (я).

0 голосов
/ 05 марта 2011

Я думал об этом (и использовал немного), и я нашел, что было бы более полезным, если просто вернуть логическое значение, целое число или пройти весь путь до создания класса для возврата состояния и некоторых значений связан с этим состоянием, и я действительно считаю целесообразным возвращать простое перечисление : мой код кажется более читабельным, и у меня нет всей нагрузки на исключение, потому что, как я прочитал одно: исключение должно быть исключительным =)

0 голосов
/ 07 марта 2009

Pontus Gagge имеет право: заключить ваши методы в класс и раскрыть состояние через свойство.

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

public enum Status
{
    Good,
    Bad,
    Indifferent
};

public class Program
{
    static void Main(string[] args)
    {
        Status s = (Status) 30;
    }
}

В принципе небезопасно предполагать, что переменная типа enum содержит одно из возможных значений; оно может содержать невозможное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...