是否需要将枚举转换为对应的数值类型?
本文关键字:类型 枚举 转换 是否 | 更新日期: 2023-09-27 18:12:43
我已经设置了一个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
型
您仍然需要从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
}
您最好显式地声明转换:
if (command == (byte) ServerCommands.Join)
或者更好:
if ((ServerCommands) command == ServerCommands.Join) //always convert to the more restrictive type.
这是一种预防措施,以防止在不知道对象来自不同类型的情况下比较值。
相等意味着两个对象具有相同的类型。事实并非如此。ServerCommands
extend from byte。因此,一个字节本身不是一个有效的ServerCommands
对象…
此外,: byte
更多地被用作显式编码。具有相同的二进制编码并不意味着两个对象是相同的。例如,14.25f
和0x41640000
是二进制相同的…
您可能需要强制类型转换您的enum:
if (command == (byte)ServerCommands.Join)