我对显式枚举转换有点困惑,这到底是什么意思..
我正在尝试使用枚举来做一个非常酷的预期行为,同时充当一个很好的幻数替换..用一块石头杀死两只鸟。
我得到了这样的东西。
public enum Size {Bare, Fixed, VariableByte, VariableShort};
预期行为的美妙之处在于我正在使用的这个协议。
如果我只是发送一个没有任何操作码命令的数据包,它被称为裸数据包,这意味着缓冲区大小只是有效负载,类似于
新字节[有效载荷大小];但是 [payloadSize+Bare] 是等价的
byte[] buffer = new byte[payloadSize+Bare]; //Bare = 0
如果数据包是固定的.. 它包含一个必须附加在前面的操作码。所以是
新字节[1+有效载荷];
byte[] buffer = new byte[payloadSize+Fixed] //Fixed of course = 1.
VariableByte 前面包含一个操作码和一个表示数据包大小的字节。这适用于 255 大小范围等的数据包。这是
新字节[2+有效载荷];
VariableShort 与上述相同,只是数据包大小可以是一个字 65535 有效负载。这是
如果协议发生变化,我将来可能会给自己带来问题,那么我将来可能必须为枚举分配值以解决问题,但现在它是一个有效的枚举,从 index=0 开始 [谷歌搜索后我听说如果您不会以默认值 0 开始枚举] 这不是正确有效的枚举。大声笑 idk 这意味着什么。可能会给枚举操作带来压力。
无论如何回到我的问题。
正如我已经知道的那样,我可以这样做
int Ret = (int)Size.Bare;
或者
int Ret = Convert.ToInt32(Size.Bare);
byte[] packet = new byte[payloadSize+Ret]
或最好。
byte[] packet = new byte[payloadSize+(int)Size.Bare]
我试图避免尽可能多的编码行,甚至可能会提高性能。
我正在阅读 MSDN,发现你可以做到这一点.. 我还没有真正发现它的目的,但我正在预测它可能意味着什么..
public enum Size : int {Bare, Fixed, VariableByte, VariableShort};
我认为这是可能的
byte[] packet = new byte[payloadSize+Size.Fixed];
byte[] packet = new byte[payloadSize+Size.VariableShort];
ETC...
但不幸的是,事实并非如此,我得到了这个老错误
运算符“+”不能应用于“int”类型和 Packet.Size 的操作数
所以我想知道在枚举前面放置一个字节转换到底意味着什么?因为它真的不会让我像上面尝试的那样做任何很酷的事情。
它是否仅将其限制为仅转换为字节?还是什么,或者它只是为了看起来很旧?
似乎没有什么限制。
byte[] buffer = new byte[payloadZie+(byte)Size.Fixed];
仍然有效,当然int != byte。
只是想知道这可能意味着什么。
谢谢对不起,如果我问了太多问题:\
你们提供的答案比任何论坛期间都好。