简单十六进制值转换为Enum类型值问题

本文关键字:类型 问题 Enum 转换 十六进制 简单 | 更新日期: 2023-09-27 18:01:48

我为这个小问题纠结了一个晚上,还是没能解决。我想要的只是一些带有十六进制值的enum元素,并将值转换为enum,但是。net不知何故认为我的enum是不合法的。

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);  
        }
    }
}

是什么错了,我应该如何解决它?

简单十六进制值转换为Enum类型值问题

你应该使用

command = (CommandEnum.Command)receiveByte;

command应定义为

ConnamdEnum.Command command

一般来说,看起来不需要包装器类CommandEnum,只需要定义enum Command

CommandEnum不是enum,它是一个类!您已经将枚举Command定义为"内部"枚举,因此以下操作应该可以工作:

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

您传递的是包含枚举CommandEnum的类的名称,而不是枚举CommandEnum.Command的名称。下面的代码对你有用:

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

而且,您使用的语法相当复杂,您可以直接转换为:

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

Try

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 enum

因为你的enum是typeof(byte),所以不需要做任何事情

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

注:你不能有0x00标志