【发布时间】:2014-07-22 23:53:02
【问题描述】:
我继承了一些需要与服务器和客户端一起维护的代码。当前,某些设置通过内部二进制协议的一组标志传递给客户端。 例如,
if (object.has.someAttribEnum == SYS_ON)
settingsFlag = settingsFlag | 2;
...
...
if(foo.has.someAttribEnum == DISP_ON)
settingsFlag = settingsFlag | 4398046511104;
这些设置变得非常庞大,因为标志是 UInt64,所以我们在 2^45。而且这个功能的赌注也很大。开发人员很容易犯错误,例如使用不是 2 的幂的值,破坏客户端接收到的整个设置标志。
最好的解决方案可能是通过二进制协议发送序列化对象?由于一些实施和时间限制,这可能无法立即实现。
我可以做些什么来提高它的可读性和可管理性?我什至开始考虑使用内联移位而不是值 即,
if(foo.has.someAttribEnum == DISP_ON)
settingsFlag = settingsFlag | (1 << 42);
感谢您对此的任何想法。
【问题讨论】:
-
您是否考虑过使用 [Flags] 枚举? stackoverflow.com/questions/8447/…
-
我还建议走枚举路线
-
你的意思是
(1 << 42)。我推荐一个标志枚举,其成员是根据班次定义的。 -
与@mclaassen Flags 枚举相同的问题是考虑到这一点而设计的。可能也非常简单地 someAttribEnum
-
@usr 是的,谢谢,已编辑。
标签: c# flags readability