Перечислены ли перечисления С#?
Если нет, то какие последствия?
Перечислены ли перечисления С#?
Если нет, то какие последствия?
Чтобы дать немного другой ответ... в то время как значения являются безопасными по типу с точки зрения кастинга, они все еще не отмечены, как только они были выбраны - i.e.
enum Foo { A = 1, B = 2, C = 3 }
static void Main()
{
Foo foo = (Foo)500; // works fine
Console.WriteLine(foo); // also fine - shows 500
}
По этой причине вы должны позаботиться о проверке значений - например, с помощью default
в switch
, которая выдает исключение.
Вы также можете проверить (для значений не [Flags]
) с помощью:
bool isValid = Enum.IsDefined(typeof(Foo), foo);
Забастовкa >
Да, они есть.
Ниже приведено http://www.csharp-station.com/Tutorials/Lesson17.aspx
Перечисления - это строго типизированные константы. Они по сути являются уникальными типами, которые позволяют присваивать символические имена целым значениям. В традиции С# они строго типизированы, что означает, что перечисление одного типа не может быть явно не привязано к перечислению другого типа, даже если базовое значение их членов одинаково. Вдоль тех же линий интегральные типы и перечисления не являются неявно взаимозаменяемыми. Все назначения между различными типами перечислений и интегральными типами требуют явного литья.
Для тех, кто предлагает использовать Enum.IsDefined для проверки правильности аргументов... не надо! Per Brad Abrams (из Обновление руководств по дизайну каркаса в Enum Design):
Есть действительно две проблемы с Enum.IsDefined(). Сначала он загружает отражение и кучу метаданных холодного типа, что делает его обманчиво дорогостоящим вызовом. Во-вторых, как отмечается в примечании, здесь есть проблема с версией.
Перечисления - это строго типизированные константы. Они по сути являются уникальными типами, которые позволяют назначать символические имена интегральные значения. В традиции С# они строго типизированы, что означает, что перечисление одного типа не может быть неявно присвоенный перечислению другого типа, хотя базовая ценность их членов тоже самое. В то же время, интегральные типы и перечисления не неявно взаимозаменяемы. Все присвоения между различными перечислениями типы и интегральные типы требуют явное приведение.
Да.
С#: перечисление типов:
-Абезопасное перечисление именованных значений.
- предотвращает ошибки программирования
-User может управлять базовым типом (по умолчанию для int)
- также может управлять базовыми значениями
Технически нет, потому что вы можете представить Enum в качестве базового значения (int, long и т.д.). Однако, если вы убедитесь, что используете только перечисление по его предоставленным именам, вы получите ошибки времени компиляции, если вы измените имя перечислимого значения без обновления его ссылок. В этом отношении да, это безопасный тип.
Я опаздываю на вечеринку здесь, но я хотел выбросить что-то еще... Обновление для . от Krzysztof Cwalina. В дополнение к превосходному подсказку выше при проверке того, чтобы действительное значение передавалось в ваш Enums, это дает другие рекомендации и рекомендации относительно того, как их эффективно использовать, кучу gotchas (особенно задействованные перечисления Flags
) и т.д.
да, они сильно набрали безопасный u, не может ли он не прибегнуть к конверсии константных переменных enum в целочисленное значение u hv 2 expilcitly do dat например enum days { солнце, понедельник } int e = (int) days.sun; Console.WriteLine(е);
Переменные перечисления С# имеют тип безопасного значения
Я подошел к отличному видеоуроку по перепискам, которые демонстрируют свой тип безопасного характера. Посмотрите здесь и там.