简单的十六进制值转换为枚举类型值问题

时间:2011-07-11 07:57:19

标签: c# enums

我一直在与这个小问题作斗争一晚,我无法理解。我想要的只是一些带有Hex值的枚举元素并将值转换为枚举,但.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 个答案:

答案 0 :(得分:1)

CommandEnum不是枚举,而是一堂课!您已将枚举Command定义为“内部”枚举,因此以下内容应该有效:

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

答案 1 :(得分:1)

您传递的是包含枚举CommandEnum的类的名称,而不是枚举的名称CommandEnum.Command。以下内容适用于您:

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

此外,您使用的语法相当复杂,您可以改为:

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

答案 2 :(得分:1)

你应该使用

command = (CommandEnum.Command)receiveByte;

command应定义为

ConnamdEnum.Command command

通常,看起来您不需要包装类CommandEnum,您应该只定义enum Command

答案 3 :(得分:0)

尝试

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枚举。

答案 4 :(得分:0)

由于你的枚举是typeof(byte),只需要强制转换它,不需要做任何其他事情

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

P.S。你不能有一个0x00标志。