В данной программе определяется и используется перечислимый тип с именем orientation. Первое, на что следует обратить внимание: код с описанием типа помещен в пространство имен chO5ExO2, а не в то место, где находится остальной код. Это сделано потому, что в процессе выполнения программы не происходит последовательного выполнения строк определения, как это имеет место с другими строками кода приложения. Выполнение приложения начинается с определяемого нами места, причем приложение имеет доступ к новому типу, поскольку принадлежит тому же пространству имен.
Первый вариант нашего примера демонстрирует основной метод создания переменной нового типа, присваивание ей значения и вывод этого значения на экран.
Затем мы модифицировали код, чтобы показать преобразование перечислимых значений в другие типы. Заметьте, что в таких случаях необходимо использовать явное преобразование. Несмотря на то что базовым типом типа orientation является тип byte, нам все равно приходится использовать явное приведение типа (byte) для преобразования значения переменной myDirection в тип byte:
directionByte = (byte)myDirection;
Такое же явное приведение типа требуется и для обратного преобразования, когда тип byte нужно преобразовать в тип orientation. Например, для преобразования переменной типа byte с именем myByte в тип orientation и присвоения получившегося значения переменной myDirection можно воспользоваться следующим кодом:
myDirection = (orientation)myByte;
Естественно, в данном случае необходимо действовать очень аккуратно, поскольку не каждое из допустимых значений переменной типа byte соответствует какому-либо из описанных значений переменной типа orientation. В переменных типа orientation вполне могут храниться и другие значения типа byte, и, хотя это не приведет к непосредственному возникновению ошибки, логика дальнейшего выполнения приложения может быть нарушена.
Для получения строкового значения из значения перечислимого типа можно использовать Convert.ToString():
directionString = Convert.ToString(myDirection);
Приведение (string) в данном случае не будет выполняться, поскольку здесь требуется более сложная обработка, нежели простой перенос данных, хранящихся в переменной перечислимого типа, в переменную типа string. В качестве альтернативы можно воспользоваться командой ToString () самой переменной. Следующий код даст точно такой же результат, что и использование Convert.ToString()
directionString = myDirection.ToString();
Обратное преобразование значения типа string в значение перечислимого типа также возможно, однако для этого потребуется немного более сложный синтаксис. Для преобразований такого рода существует специальная команда Enum.Parse(), которая используется следующим образом:
Здесь задействован еще один оператор — typeof, который позволяет получать тип своего операнда. Мы могли бы воспользоваться им для нашего перечислимого типа orientation следующим образом:
Естественно, далеко не каждое строковое значение будет соответствовать какому-либо значению типа orientation. Использование значения, которому не соответствует ни одно из значений перечислимого типа, приведет к возникновению ошибки. Как и все в С#, эти значения чувствительны к регистру, поэтому мы получим ошибку даже в том случае, если наша строка будет соответствовать перечислимому значению во всем, кроме регистра (например, если переменной myString будет присвоено значение "North" вместо "north").