日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
總結(jié)C#枚舉在開發(fā)項(xiàng)目中的應(yīng)用

本文主要是我在實(shí)際項(xiàng)目中對C#枚舉的應(yīng)用總結(jié),如果存在不足的地方歡迎您指出。

一、枚舉基本運(yùn)用

1、枚舉其實(shí)可以理解為一個恒量的結(jié)合,又或者可以認(rèn)為它是一種類型。比如以下枚舉定義:

 
 
 
 
  1. public enum MicrosoftTechnology     
  2.   {          
  3. CSharp,         
  4.  ASPNETMVC,         
  5.  SQLServer,        
  6.   WCF,         
  7.  SilverLight,     
  8.  } 

此枚舉默認(rèn)值為int型,當(dāng)然我們可以根據(jù)需要指定枚舉的數(shù)據(jù)類型。比如 public enum MicrosoftTechnology: long{....} 等。MicrosoftTechnology枚舉int值分別為  

Csharp:0;ASPNETMVC:1;SQLServer:2;WCF:3;SilverLight:4, 以自增1的形式自動賦值。當(dāng)然也可以指定每個枚舉項(xiàng)的值。

2、枚舉的位運(yùn)算:

Flag特性表示枚舉支持位運(yùn)算。一般情況下我們用到的位運(yùn)算符有:&(與)、|(或)、~(非)。

首先我們?yōu)槊杜e加上[Flags]特性后再指定枚舉值。

將1、中的代碼修改如下:   

 
 
 
 
  1. [Flags]    public enum MicrosoftTechnology      
  2. {          
  3. CSharp = 1,          
  4. ASPNETMVC = 2,          
  5. SQLServer = 4,         
  6.  WCF = 8,         
  7.  SilverLight = 16,     
  8.  } 

這里指定枚舉值主要是為了使用與、或、非這三個位運(yùn)算符。將枚舉值轉(zhuǎn)化成二進(jìn)制值:

      CSharp: 1 = 0001

      ASPNETMVC: 2 = 0010

      SQLServer: 4 = 0100

      WCF: 8 = 1000

      SilverLight: 16 = 10000

舉例說明:如果某位開發(fā)者選擇兩項(xiàng)微軟技術(shù)分別為CSharp和ASPNETMVC 用位運(yùn)算表達(dá)為 0001 | 0010 = 0011。經(jīng)過不懈的努力這位開發(fā)者掌握了以上兩項(xiàng)技術(shù)“0011”。現(xiàn)在我們想通過位運(yùn)算檢測出這位開發(fā)者是否精通CSharp:代碼為:

(MicrosoftTechnology.CSharp|MicrosoftTechnology.ASPNETMVC) & MicrosoftTechnology.CSharp 等同 (0001 | 0010 = 0011)& 0001 等于 0001(CSharp :1)
講到這里我想您應(yīng)該不難理解:為了對枚舉運(yùn)用位操作時指定枚舉值的緣故了。非(~)操作符這里就留給讀者自己實(shí)踐了。

二、為枚舉進(jìn)行本地化

通過.net泛型機(jī)制編寫枚舉本地化通用方法,代碼如下:

 
 
 
 
  1.  ///    
  2. /// 本地化枚舉通用方法   
  3. ///    
  4. ///    
  5. /// Ryanding   
  6. private static string LocalizeEnumeration(object enumerator)   
  7. {   
  8.  ResourceManager resources = new ResourceManager("resx文件名",  
  9.  System.Reflection.Assembly.GetExecutingAssembly());  
  10. string name = String.Format("{0}.{1}.Text", enumerator.GetType().Name, enumerator);  
  11.             string localizedDescription = resources.GetString(name);  
  12.  if (localizedDescription == null)  
  13.   return enumerator.ToString();  
  14.          else18                 return localizedDescription;  
  15.    }  
  16.  ///   
  17.  /// 翻譯枚舉成中文  
  18.  ///   
  19.  public static List GetEnumStringList()  
  20.     {  
  21.  string[] resultPrepare = Enum.GetNames(typeof(T));  
  22.  List result = new List();  
  23.       Array.ForEach(resultPrepare, f => result.Add(new KeyValuePair  
  24.     {  
  25.     Key = (int)(Enum.Parse(typeof(T), f)),  
  26. Value = LocalizeEnumeration(Enum.Parse(typeof(T), f))  
  27.    }  
  28. ));  
  29.  return result;  
  30.     } 

通過以上代碼,可以認(rèn)為枚舉也是一種類型。這里通過泛型機(jī)制將枚舉本地化統(tǒng)一處理。

三、枚舉在ORM中提高程序可讀性

以LinqToSQL來列舉枚舉在ORM中的作用:

在大中型系統(tǒng)中設(shè)計(jì)數(shù)據(jù)庫表時,比如有一張Customer表,存在一字段CustomerType(int 型) 。

CustomerType 枚舉定義如下:

 
 
 
 
  1. public enum CustomerType     
  2.  {         
  3.  Trader = 0,          
  4. Supplier = 1,         
  5.  Logistics = 2,     
  6.  } 

Customer表結(jié)構(gòu)如下:

LinqTosql debug如下:

可以看出LinqTosql 已經(jīng)很“完美”的將LINQ語句解析成SQL語句。這樣當(dāng)我們的業(yè)務(wù)變得相對復(fù)雜,枚舉狀態(tài)數(shù)量也逐漸增加時,開發(fā)者無需硬記0,1,2,3這些到底代表數(shù)據(jù)的何種業(yè)務(wù)狀態(tài)。通過枚舉映射到ORM,我們的代碼可讀性進(jìn)一步加強(qiáng)。當(dāng)然更便于維護(hù)了!

最后希望本篇文章可以給您帶來幫助,如有不足之處歡迎指出,謝謝!


當(dāng)前標(biāo)題:總結(jié)C#枚舉在開發(fā)項(xiàng)目中的應(yīng)用
網(wǎng)頁URL:http://www.dlmjj.cn/article/dhppcoi.html