Перечисления C#: значение Nullable или' Unknown'?
Если у меня есть класс с помощью enum член и я хочу иметь возможность представлять ситуации, когда этот член не определен, что лучше?
A) объявите член как nullable в классе, используя типы nullable. Например:
public SomeEnum? myEnum;
b) добавьте в перечисление значение по умолчанию 'unknown'. Например:
public enum SomeEnum {
Unknown,
SomeValueA,
SomeValueB,
SomeValueC,
}
Я не вижу никаких серьезных плюсов / минусов в любом случае; но, возможно, один предпочтительнее другого?
6 ответов:
определенно используйте тип значения nullable - вот для чего они предназначены. В нем прямо говорится о вашем намерении. Это также означает, что вы можете использовать
Enum.IsDefined(или эквивалент с Непринужденная Мелодия Если вы хотите безопасность универсального типа), чтобы легко определить, является ли конкретное значение реальные значение, не беспокоясь о "поддельной" тоже.
Я согласен с archimed7592, что существует реальная разница между отсутствующим значением и "неизвестным" значением.
пример:
"какая у вас группа крови?"
Null = отсутствует значение -- > вопрос не был дан ответ -- > Задать вопрос
"неизвестно" -- > пациент указывает, что он не знает --> заказать лабораторный тест на группу крови
вам просто нужно решить, нужно ли вам значение для представления неизвестных значений, или вам нужен способ представления отсутствия какого-либо значения.
в случае необходимости представлять неизвестные значения, дополнительный элемент перечисления звучит хорошо в качестве решения.
в случае необходимости представить отсутствие какого-либо значения, сделать его обнуляемым.
имейте в виду, что нет ничего плохого в том, что оба" неизвестных " члена перечисления и само перечисление могут быть аннулированы одновременно время.
НТН.
ЭТО ЗАВИСИТ!
Билл Вагнер перечислил некоторые веские причины, чтобы добавить Undefined
enumкогда это имеет смысл. Я предлагаю вам найти полный, но вот предварительный просмотр:пункт 8: убедитесь, что 0 является допустимым состоянием для типов значений
инициализация системы .NET по умолчанию устанавливает все объекты на все 0. вы не можете запретить другим программистам создавать экземпляр типа значения, который является инициализируется 0С. Принять, что значение по умолчанию для своего типа.
один особый случай перечисления. Никогда не создавайте перечисление, которое не включает 0 в качестве допустимого выбора. Все перечисления являются производными от System.ValueType. Значения для перечисления начинаются с 0, но вы можете изменить это поведение...
Теперь у меня есть ситуация, когда пользователи должны выбрать какой-то тип из ComboBox, или они не могут выбрать тип. Я использую перечисление с
Если это nullable, вы получите его как значение по умолчанию, вы получите исключения, если попытаетесь использовать его при null (что хорошо!)
Comments