- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对显式枚举转换的真正含义感到有点困惑。
我正在尝试使用枚举来执行非常酷的预期行为,同时充当一个很好的魔术数字替换..用一 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/
我想做的是,如果鼠标位于“下一个”按钮上,它会以慢速向右滚动,如果鼠标没有位于“下一个”按钮上,它会停止滚动? 这是我的尝试http://jsfiddle.net/mdanz/nCCRy/14/ $(
StyleCop 是一个很棒的视觉工作室小插件。但它不会向您显示实时提示或提供任何自动修复。 随之而来的是 reSharper 和 StyleCop for reSharper,这是理想的解决方案,但
我为我的MatchQuery使用了模糊性选项,但是我想将模糊性值设置为auto。有什么办法吗? 另外,对于完成建议程序,您可以将其设置为支持unicode,对于我的MatchQuery,有什么方法可以
我想从表中获取一行[字符串名称,字符串密码,int 某些内容]并将其映射到一个 User 对象,该对象具有 3 个属性,如上面的 getter 和 setter有什么方法可以自动完成吗?我考虑过反射,
我有一个像这样的方法:void m1(string str) 并且有一个像这样的类: public class MyClass { public bool b1 { set; get; }
我正在尝试使用 $rootScope 从一个 Controller 向另一个 Controller $broadcast 一些数据。 如果我使用像 ng-click 这样的触发器来运行将广播的功能,它
我考虑了很多关于是要使用完全自动化的缓存还是手动缓存。 我们的自动方法是一种解决方案,它可以挖掘数据库、查询和格式化每个潜在和 future 的数据请求,并将其保存到适当的缓存存储(内存缓存或基于磁盘
我的 CSS 必须使用过渡来更改,直到现在我都使用 div:hover 来实现。 当您单击另一个 div 时需要激活过渡,而不是当您将鼠标悬停在必须移动/更改的 div 上时。 我该怎么做? 谢谢 永
在我的应用程序中,我需要一些动画,但如果它已经设置了动画,则不需要持续时间。但我的问题是它会自动添加持续时间。 在这里你可以看到 2 个函数,第二个没有持续时间但它确实有持续时间(可能从 1 秒开始)
两年前,我需要制作一个工具,通过 POST 自动将 txt/csv 文件上传到我的 Web 服务器,然后使用 cronjob 通过 PHP 对其进行解析。 这有两次在每天午夜自动发生。尽管这行得通,但
请阅读下面程序中的评论: #include void test(char c[]) { c=c+2; //why does this work ? c--; printf("%
也许是个幼稚的问题,但是...... 确认或拒绝: 自动和静态存储持续时间的对象/变量的内存的存在是在编译时确定的,程序运行时失败的可能性绝对为零,因为没有足够的内存用于自动对象。 自然地,当自动对象
有没有什么方法可以自动获得类中属性更改的通知,而不必在每个 setter 中都编写 OnPropertyChanged? (我有数百个属性,我想知道它们是否已更改)。 安东建议 dynamic pro
我们在使用 Azure DevOps 的项目中采用了 gitflow 流程。我有以下场景: 当功能分支合并到 Develop 时,我想在完成拉取请求的同时执行压缩合并策略 当 Release 分支定期
我的网站上有一个评论部分,我将 html 编码的评论保存在我的数据库中。所以我添加了这条评论- "testing" `quotes` \and backslashes\ and html 并将其保存在
是否存在“ checkin 前 TFS 自动 checkout ”这样的功能,以便在我说“ checkin ”之前我不会 checkout 任何文件,例如以防我只是临时更改文件 - 这一直发生。 换句
我有一个运行在 Linux/Apache/Tomcat 堆栈上的网站,它需要每隔几个月自动脱机以进行服务器维护,这将持续任意时间。有哪些选项可以让 Apache 建立和取消“服务器维护”页面? 我需要
我经常在工作中创建文档,在公司内部,由于我们使用的首字母缩写词和缩写词的数量,我们几乎拥有自己的语言。因此,我厌倦了在发布文档之前手动创建首字母缩写词和缩写表,并且快速的谷歌搜索发现了一个可以有效地为
我希望在用户或宏将计算模式从自动更改为手动或手动更改为自动时运行代码。是否有为此触发的事件? (属性是 Application.Calculation 在 Excel 互操作中。) 使用 Excel
这个问题在这里已经有了答案: Repeat command automatically in Linux (13 个回答) 6年前关闭。 我想创建一个脚本来获取另一个文件夹中的所有文件夹名称。并为这些
我是一名优秀的程序员,十分优秀!