Nat*_*ate 6 .net c# enums flags
我理解Enums如何在C#中工作,我得到了Flags属性带给表的内容.
我在这里看到了这个问题.推荐第一种口味,但没有提供任何理由/理由.
这两个定义的方式有什么不同,一个比另一个好吗?使用第一个synax代替第二个synax有什么好处?在定义Flags类型Enums时,我总是使用第二种风格......我一直都在做错吗?
[Serializable]
[Flags]
public enum SiteRoles
{
User = 1 << 0,
Admin = 1 << 1,
Helpdesk = 1 << 2
}
Run Code Online (Sandbox Code Playgroud)
那是不一样的
[Serializable]
[Flags]
public enum SiteRoles
{
User = 1,
Admin = 2,
Helpdesk = 4
}
Run Code Online (Sandbox Code Playgroud)
第一个的主要优点是您不需要为每个标志计算正确的值,因为编译器会为您执行此操作.除此之外他们是一样的.
考虑更复杂的样本:
[Flags]
public enum SiteRoles
{
User = 1 << 12,
Admin = 1 << 13,
Helpdesk = 1 << 15,
AdvancedUser = User | Helpdesk, //or (1<<12)|(1<<13)
}
[Flags]
public enum SiteRoles
{
User = 4096, //not so obvious!
Admin = 8192,
Helpdesk = 16384,
AdvancedUser = 12288, //!
}
[Flags]
public enum SiteRoles
{
User = 0x1000, //we can use hexademical digits
Admin = 0x2000,
Helpdesk = 0x4000,
AdvancedUser = 0x3000, //it much simpler calculate binary operator OR with hexademicals
}
Run Code Online (Sandbox Code Playgroud)
此示例显示在这种情况下,第一个版本更具可读性.十进制文字不是表示标志常量的最佳方式.有关按位运算的更多信息(也可用于表示标志常量),请参阅http://en.wikipedia.org/wiki/Bitwise_operation
| 归档时间: |
|
| 查看次数: |
4151 次 |
| 最近记录: |