之前处理数据状态时,多种不同意义的状态,一般要不是分多个字段保存,要不就是保存的数值求mod取余,同事分享了个位运算方式保存状态的方式:
Code
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls; public partial class _Default : System.Web.UI.Page
{
{
/* 枚举定义所需要使用的状态 */
T0 = 1,
T1 = 2,
T2 = 4,
T3 = 8,
T4 = 16,
T5 = 32,
T6 = 64,
T7 = 128,
T8 = 256
//同理 当状态过多时 使用2进制值过大可以选择使用16进制来保存
//010,1010,1001,0111,1010
//2, C,9, 7,C
}
{
XType xzonghe = 0;
//使用枚举值 位运算添加多个状态值
xzonghe = XType.T0 | XType.T1 | XType.T2 | XType.T3;
int houlai = 0;
if ((i & (int)XType.T2) == (int)XType.T2)//判断该状态是否存在
{
//删除本来多个状态中的其中一个状态,切记先判断该状态是否存在
houlai = i ^ (int)XType.T2;
}
int new1 = 0;
//添加新状态
new1 = (int)xzonghe | (int)XType.T4;
throw new Exception(xzonghe.ToString("F") + "___" + ((XType)houlai).ToString("F") + "___" + ((XType)new1).ToString("F") + "___" + new1);
}
}
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls; public partial class _Default : System.Web.UI.Page
{
enum XType
{
/* 枚举定义所需要使用的状态 */
T0 = 1,
T1 = 2,
T2 = 4,
T3 = 8,
T4 = 16,
T5 = 32,
T6 = 64,
T7 = 128,
T8 = 256
//同理 当状态过多时 使用2进制值过大可以选择使用16进制来保存
//010,1010,1001,0111,1010
//2, C,9, 7,C
}
protected void Page_Load(object sender, EventArgs e)
{
XType xzonghe = 0;
//使用枚举值 位运算添加多个状态值
xzonghe = XType.T0 | XType.T1 | XType.T2 | XType.T3;
int i = (int)xzonghe;
int houlai = 0;
if ((i & (int)XType.T2) == (int)XType.T2)//判断该状态是否存在
{
//删除本来多个状态中的其中一个状态,切记先判断该状态是否存在
houlai = i ^ (int)XType.T2;
}
int new1 = 0;
//添加新状态
new1 = (int)xzonghe | (int)XType.T4;
throw new Exception(xzonghe.ToString("F") + "___" + ((XType)houlai).ToString("F") + "___" + ((XType)new1).ToString("F") + "___" + new1);
}
}
缺点是在数据库中维护数据时,由于保存的位运算后加出来的状态值,可能不是很直观,需要转化出来!