代码改变世界

一个枚举(Enum)的位操作的例子

2012-03-29 18:09  音乐让我说  阅读(678)  评论(0编辑  收藏  举报

比较过程为 0101 & 0001 = 0001, 0001的0位用与C#位运算把其它位都置成0, 变成只比较1的这一位.

 更新说明:

推荐 Enums.NET 开源组件处理 C# 枚举。这里是我整理的 Demo:https://files.cnblogs.com/files/Music/Enums.NET_Demo_VeryGood.rar

代码:

using System;

namespace DearBruce.ConAppTest
{
class Program
{
static void Main(string[] args)
{
string[] items = new string[]
{
GetResult(FreeType.Discount), //打折中...
GetResult(FreeType.AlwaysNonDiscount), //没有打折...
GetResult(FreeType.LimiteTimeDiscount), //打折中...
GetResult(FreeType.Discount | FreeType.AlwaysNonDiscount), //打折中...
GetResult(FreeType.WaitingForDiscount), //没有打折...
GetResult(FreeType.AlwaysNonDiscount | FreeType.WaitingForDiscount), //没有打折...
};
CommonHelper.Show(items);
}

static string GetResult(FreeType freeType)
{
//比较过程为 0101 & 0001 = 0001, 0001的0位用与C#位运算把其它位都置成0, 变成只比较1的这一位.

//当然,如果是判断是否等于0也可以,因为位与操作之后,不是自己就是0
if ( ((freeType & FreeType.Discount) == FreeType.Discount) || ((freeType & FreeType.LimiteTimeDiscount) == FreeType.LimiteTimeDiscount))
{
return "打折中...\n";
}
return "没有打折...\n";
}
}

[Flags]
public enum FreeType
{
/// <summary>
/// 打折
/// </summary>
Discount = 1,

/// <summary>
/// 限时打折
/// </summary>
LimiteTimeDiscount = 2,

/// <summary>
/// 永远不打折
/// </summary>
AlwaysNonDiscount = 4,

/// <summary>
/// 等待打折
/// </summary>
WaitingForDiscount = 8
}
}

 

谢谢浏览!