Простое шестнадцатеричное значение конвертируется в проблему значения типа Enum - PullRequest
0 голосов
/ 11 июля 2011

Я боролся с этой маленькой проблемой в течение ночи, и я не мог понять это.Все, что я хочу, это иметь некоторые элементы enum со значением Hex и преобразовать значение в enum, но .NET почему-то не считает мое перечисление допустимым.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class CommandEnum
    {
        [Flags]
        public enum Command : byte
        {
            CMD_HAND_SHAKE = 0x0,
            CMD_SET_MAX_CURRENT = 0x1,
            CMD_SET_TEST_SPEED = 0xA
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            CommandEnum command;
            byte receiveByte = 0x0A;

            // Error: Type provided must be an Enum. Parameter name: enumType:
            command = (CommandEnum)Enum.ToObject(typeof(CommandEnum), receiveByte);  
        }
    }
}

Что не так и как мне это исправить?

Ответы [ 5 ]

1 голос
/ 11 июля 2011

Вы должны использовать

command = (CommandEnum.Command)receiveByte;

и command должны быть определены как

ConnamdEnum.Command command

Как правило, вам не нужен класс-оболочка CommandEnum, вам просто нужно определить enum Command

1 голос
/ 11 июля 2011

Вы передаете ему имя класса, содержащего ваше перечисление CommandEnum, вместо имени вашего перечисления, CommandEnum.Command.Следующее должно работать для вас:

CommandEnum.Command command = (CommandEnum.Command)Enum.ToObject(typeof(CommandEnum.Command), receiveByte);

Кроме того, синтаксис, который вы используете, довольно запутанный, вы можете просто использовать вместо него:

CommandEnum.Command command1 = (CommandEnum.Command)receiveByte;
1 голос
/ 11 июля 2011

CommandEnum это не перечисление, это класс!Вы определили ваше перечисление Command как «внутреннее» перечисление, поэтому должно работать следующее:

command = (CommandEnum.Command)Enum.ToObject(typeof(CommandEnum.Command),
                                             receiveByte);
0 голосов
/ 11 июля 2011

Поскольку ваше перечисление является typeof (byte), просто приведите его, больше ничего не нужно делать

CommandEnum.Command val= (CommandEnum.Command)receiveByte;

P.S. Вы не можете иметь флаг 0x00.

0 голосов
/ 11 июля 2011

Попробуйте

CommandEnum.Command command;
byte receiveByte = 0x0A;

// Error: Type provided must be an Enum. Parameter name: enumType:
command = (CommandEnum.Command)Enum.ToObject(typeof(CommandEnum.Command), receiveByte);  

или лучше,

command = (CommandEnum.Command)receiveByte;  

В исходном коде вы используете все неправильные типы.Ваш тип перечисления является общедоступным вложенным типом для класса CommandEnum (и на самом деле нет веской причины делать что-то подобное).Попробуйте избавиться от класса CommandEnum и просто используйте перечисление Command.

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