gpt4 book ai didi

C#枚举题自动转换==显式枚举转换?

转载 作者:太空宇宙 更新时间:2023-11-03 22:11:44 26 4
gpt4 key购买 nike

我对显式枚举转换的真正含义感到有点困惑。

我正在尝试使用枚举来执行非常酷的预期行为,同时充当一个很好的魔术数字替换..用一 block 石头杀死两只鸟。

我有这样的东西。

public enum Size {Bare, Fixed, VariableByte, VariableShort};

预期行为的美妙之处在于我正在使用的这个协议(protocol)。

如果我只是发送一个没有任何操作码命令的数据包,它被称为裸数据包,这意味着缓冲区大小只是有效载荷,类似于

new byte[payloadSize]; but [payloadSize+Bare] would be equivalent

byte[] buffer = new byte[payloadSize+Bare];   //Bare = 0

如果数据包是固定的..它包含一个必须附加在前面的操作码。所以是

new byte[1+payload];

byte[] buffer = new byte[payloadSize+Fixed] //Fixed of course = 1.

VariableByte 包含前面的操作码和表示数据包大小的字节。这适用于 255 大小范围内的数据包等。这是

new byte[2+payload];

VariableShort 与上面相同,只是数据包大小可以是一个字 65535 有效载荷。这是

如果协议(protocol)发生变化,我可能会在未来给自己带来问题,那么我可能不得不在未来为枚举赋值来解决问题,但现在它是一个从 index=0 开始的有效枚举[谷歌搜索后我听说如果你不以默认值 0 开始枚举] 它不是一个正确的有效枚举..lol 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];

等...

但不幸的是它不是,我得到了这个旧错误

运算符“+”不能应用于“int”类型和 Packet.Size 的操作数

所以我想知道将字节转换放在枚举前面究竟意味着什么?因为它真的不会让我像上面尝试的那样做任何很酷的事情。

它只是限制它只能转换为 byte 吗?还是别的什么,或者它只是为了看起来很旧?

似乎没有限制任何东西。

byte[] buffer = new byte[payloadZie+(byte)Size.Fixed];

仍然有效,当然 int != byte

只是想知道这是什么意思。
谢谢 对不起,如果我问了太多问题:\
你们提供的答案比任何论坛时期都好。

最佳答案

枚举提供 switch 语句和比较逻辑状态或值的比较。 (即 ConnectionState == Connected 与 ConnectionState == 1)。

这里你想要的是整数值。但是,您可以编写一个带有公共(public)字段和/或属性的类来执行您想要的操作。将其设为静态,您还将为编译器/CLR 提供良好的优化。

public static class Sizes
{
public static readonly int Bare = 0;
public static readonly int VariableByte = 65536;
}

您可以以相同的方式使用它们,但现在因为 Sizes.Bare 是一个值为 0 的整数,您可以在加法中使用它。

关于C#枚举题自动转换==显式枚举转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6421864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com