我已经设置了enum
这样:
public enum ServerCommands:byte {
New = 0,
Join = 1,
}
我想这样使用它:
byte command = buffer[0];
if (command == ServerCommands.Join) // Error: Operator == cannot be operands of type 'byte' and 'ServerCommands'.
为什么这不可能做到,我怎样才能让它发挥作用?它们都是byte
类型。
答案 0 :(得分:2)
您最好明确说明转化:
if (command == (byte) ServerCommands.Join)
甚至更好:
if ((ServerCommands) command == ServerCommands.Join) //always convert to the more restrictive type.
这是一种预防措施,可防止人们在不知道对象来自不同类型的情况下比较值。
平等意味着两个对象具有相同的类型。不是这种情况。 ServerCommands
从字节扩展。因此,一个字节本身不是有效的ServerCommands
对象......
此外,: byte
更多地用作显式编码。具有相同的二进制编码并不意味着两个对象是相同的。例如,14.25f
和0x41640000
是二元相同的......
答案 1 :(得分:2)
您仍然需要从byte
投射到ServerCommands
!这不是自动完成的。在将enum
转换为int
或其他允许的数字类型时,将数字分配给枚举值只是为了清晰起见。
为枚举值指定数值不会将其类型更改为数字类型!您可以将任何枚举值转换为int
,因为所有枚举(如果未另行声明)都可以转换为int
,第一个枚举值为int
值0
。
public enum MyEnum
{
First,
Second
}
等于
public enum MyEnum : int
{
First = 0,
Second
}
如果数字不是线性的,则需要编号枚举值的功能,如:
public enum ErrorCodes: int
{
Success = 0,
FileNotFound = 1,
MissingRights = 5,
WhatTheHeck = 18
}
答案 2 :(得分:0)
您可能需要投射枚举:
if (command == (byte)ServerCommands.Join)