Joe*_*Min 3 c# enums bit-manipulation
好的,所以我是C#的新手,对于我的生活,我无法理解下面的代码(来自遗留项目)应该做什么:
[Flags]
public enum EAccountStatus
{
None = 0,
FreeServiceApproved = 1 << 0,
GovernmentAccount = 1 << 1,
PrivateOrganisationAccount = 1 << 2,
All = 8
}
Run Code Online (Sandbox Code Playgroud)
<<操作员在枚举中到底做了什么?我们为什么需要这个?
在幕后,枚举实际上是一个int.
<<是按位左移运算符
编写此代码的等效方法是:
[Flags]
public enum EAccountStatus
{
None = 0,
FreeServiceApproved = 1,
GovernmentAccount = 2,
PrivateOrganisationAccount = 4,
All = 8
}
Run Code Online (Sandbox Code Playgroud)
请注意,此枚举具有Flag属性
如msdn中所述:
仅当要对数值执行按位运算(AND,OR,EXCLUSIVE OR)时,才使用FlagsAttribute自定义属性进行枚举.
这样,如果您想要设置多个选项,您可以使用:
var combined = EAccountStatus.FreeServiceApproved | EAccountStatus.GovernmentAccount
Run Code Online (Sandbox Code Playgroud)
这相当于:
00000001 // =1 - FreeServiceApproved
| 00000010 // =2 - GovernmentAccount
---------
00000011 //= 3 - FreeServiceApproved and GovernmentAccount
Run Code Online (Sandbox Code Playgroud)
这个SO线程有一个很好的解释flags attribute
| 归档时间: |
|
| 查看次数: |
1863 次 |
| 最近记录: |