C# 如何提高标志的可维护性和可读性

C# 如何提高标志的可维护性和可读性,c#,flags,readability,C#,Flags,Readability,我继承了一些需要在服务器和客户机上维护的代码。某些设置当前通过内部二进制协议的一组标志传递给客户端。 e、 g 这些设置变得相当大,因为标志是UInt64,所以我们在2^45。而且这个功能是相当大的。开发人员很容易犯错误,例如使用值而不是二的幂,破坏客户端接收到的整个设置标志 最好的解决方案可能是通过二进制协议发送序列化对象?由于一些实现和时间限制,这可能无法立即实现 我可以做些什么来提高此文档的可读性和可管理性?我甚至开始考虑使用移位来代替值 i、 e if(foo.has.someAttri

我继承了一些需要在服务器和客户机上维护的代码。某些设置当前通过内部二进制协议的一组标志传递给客户端。 e、 g

这些设置变得相当大,因为标志是UInt64,所以我们在2^45。而且这个功能是相当大的。开发人员很容易犯错误,例如使用值而不是二的幂,破坏客户端接收到的整个设置标志

最好的解决方案可能是通过二进制协议发送序列化对象?由于一些实现和时间限制,这可能无法立即实现

我可以做些什么来提高此文档的可读性和可管理性?我甚至开始考虑使用移位来代替值 i、 e

if(foo.has.someAttribEnum==DISP\u ON)

settingsFlag=settingsFlag |(1您可以使用[Flags]枚举。它允许您使用指定为不同值(通常为2的幂)的不同选项轻松定义枚举,并支持检查选项是否设置在给定枚举值中的操作

例如:

[Flags]
public enum MySettings : ulong
{
    SYS_ON = 1 << 1,
    DISP_ON = 1 << 42,
}

if (settings.HasFlag(MySettings.SYS_ON))
{
    //do something
}

您可以使用[Flags]枚举。它允许您使用指定为不同值(通常为2的幂)的不同选项轻松定义枚举,并支持检查是否在给定枚举值中设置了选项的操作

例如:

[Flags]
public enum MySettings : ulong
{
    SYS_ON = 1 << 1,
    DISP_ON = 1 << 42,
}

if (settings.HasFlag(MySettings.SYS_ON))
{
    //do something
}

你看过使用[Flags]枚举吗?我还建议你使用枚举路径你的意思是
(1与@mclaassen Flags enum相同的问题是在考虑到这一点的情况下设计的。可能只是简单地将一些属性定义为well@usr是的,谢谢,编辑。你看过使用[Flags]枚举吗?我还建议使用枚举路径。你的意思是
(1)与@mclaassen Flags enum相同的问题是在考虑到这一点的情况下设计的well@usr是的,谢谢,编辑。我最初认为你不能使用比Int32更长的时间,但在阅读了你的答案和上面的评论后,我测试了一下,ulong工作得很好!这正是我目前的解决方案。谢谢!我最初认为你不能使用比Int32更长的时间,但在阅读了你的答案和上面的评论后,我测试了一下,ulong工作得很好!这正是我目前的解决方案。谢谢!
[Flags]
public enum MySettings : ulong
{
    SYS_ON = 1 << 1,
    DISP_ON = 1 << 42,
}

if (settings.HasFlag(MySettings.SYS_ON))
{
    //do something
}
MySettings settings = MySettings.SYS_ON | MySettings.DISP_ON