国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

項(xiàng)目中Enum枚舉的使用

2019-11-14 15:51:51
字體:
供稿:網(wǎng)友

在.NET中,枚舉一般有兩種常見用法,一是表示唯一的元素序列,比如表示訂單狀態(tài)(未提交,待處理,處理中...)。另外一種是表示多種組合的狀態(tài),比如表示權(quán)限,因?yàn)榭赏瑫r有多個不同權(quán)限。

基本用法

這里拿項(xiàng)止中訂單的訂單狀態(tài)來舉例。

1,使用枚舉表示訂單的訂單狀態(tài),并保存到數(shù)據(jù)庫

public void SaveOrder()        {            using (var db = new HotelDBEntities())            {                var order = new EFHotelOrder                {                    OrderID = 10000,                    OrderStatus = (byte)OrderStatusType.NotSubmit//訂單狀態(tài)                };                db.HotelOrderSet.Add(order);                db.SaveChanges();            }        }
/// <summary>    /// 訂單狀態(tài)    /// </summary>     [DataContract, Serializable]    public enum OrderStatusType : byte    {        /// <summary>        /// 未提交        /// </summary>         [Description("未提交")]        [EnumMember]        NotSubmit = 0,        /// <summary>        /// 待處理        /// </summary>         [Description("待處理")]        [EnumMember]        WaitingPRocess = 1,        /// <summary>        /// 處理中         /// </summary>         [Description("處理中")]        [EnumMember]        Processing = 2,        /// <summary>        /// 預(yù)訂成功         /// </summary>         [Description("預(yù)訂成功")]        [EnumMember]        BookingSuccess = 3    }

2,從數(shù)據(jù)庫讀取訂單狀態(tài),并轉(zhuǎn)化成相應(yīng)枚舉

var orderStatus= order.OrderStatus.ToEnum<LocalHotelOrderStatusType>();//ToEnum是擴(kuò)展方法

高級用法

為了說明表示多種組合狀態(tài),拿用戶擁有的權(quán)限來說明。此時需要在枚舉上加[Flags]特性來標(biāo)記位域。

1,枚舉的定義

/// <summary>    /// 權(quán)限枚舉    /// </summary>    [Flags]    [DataContract, Serializable]    public enum Permission : int    {        //[Description("未知")]        [EnumMember]        Unknown = 0,//也可以寫成0x00或0        //[Description("創(chuàng)建")]        [EnumMember]        Create = 1 << 0,//0x01或1        //[Description("讀取")]        [EnumMember]        Read = 1 << 1,//0x02或2        //[Description("修改")]        [EnumMember]        Update = 1 << 2,//0x04或4        //[Description("刪除")]        [EnumMember]        Delete = 1 << 3//0x08或8    }

注意加了[Flags]特性后有三種寫法,一種是使用<<符號,第二種是0x01,還有一種是直接寫0,1,2,4,8...,一般來說是2的n次方來表示。

2,使用

//1,給用戶創(chuàng)建,讀取,修改和刪除的權(quán)限            var permission = Permission.Create | Permission.Read | Permission.Update | Permission.Delete;            //2,去掉用戶的修改和刪除權(quán)限            permission = permission & ~Permission.Update;//permission = permission ^ Permission.Update;這種寫法有bug,如果重復(fù)執(zhí)行又加回去了            permission = permission & ~Permission.Delete;            //3,給用戶加上修改的權(quán)限            permission = permission | Permission.Update;            //4,判斷用戶是否有創(chuàng)建的權(quán)限            var isCreate = (permission & Permission.Create) != 0;//或者var isCreate =(permission & Permission.Create)== Permission.Create

保存到數(shù)據(jù)庫的時候轉(zhuǎn)換成int類型保存。

在數(shù)據(jù)庫中可以這樣來判斷:

AND (@permission IS NULL OR (permission & @permission) =@permission)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 茶陵县| 马龙县| 潍坊市| 太仓市| 石泉县| 临城县| 衡山县| 鄄城县| 广州市| 德保县| 安西县| 二连浩特市| 孝义市| 潢川县| 巴东县| 秭归县| 永春县| 太保市| 鄱阳县| 苏尼特右旗| 满洲里市| 绍兴市| 巴马| 波密县| 封开县| 百色市| 陕西省| 扎兰屯市| 五大连池市| 蓬溪县| 革吉县| 会泽县| 景洪市| 灵台县| 舟曲县| 阳朔县| 博爱县| 广丰县| 辛集市| 浮山县| 屏东市|