我一直在与这个小问题作斗争一晚,我无法理解。我想要的只是一些带有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);
}
}
}
出了什么问题,我该如何解决?
答案 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标志。