[C#]C#補習——類型和操作符—PART3—枚舉

來源:互聯網
上載者:User

       在補習完C#類以及一些文法上的知識後,再回到類型上進行補習,本章補習的是C#中的枚舉。

以下是本文所要介紹的內容:

1、枚舉中忽略的知識。

2、枚舉常見的各種使用方法。

 

一、枚舉中忽略的知識

    對於枚舉,一般的用法都是用來解決一些代碼的可讀性,如下代碼:

switch(state){     case 0:        break;     case 1:        break;}switch(stateEnum){     case StateEnum.Opened:         break;     case StateEnum.Closed;         break;}

通過對比上面的代碼,我們可以很容易的看出使用了枚舉後代碼的可讀性更強了,而本文不是來介紹如何枚舉的基礎知識的,而是記錄下我忽略過的一些知識,也可能是你所需要瞭解的

1、枚舉中的實值型別預設為int,當然也可以是short,long等數實值型別,但是不能是char、string等類型。

如果想更改枚舉的類型只需按照以下代碼既可:

public enum StateEnum:long{}

2、枚舉中的值預設從0開始,並且可以不用給枚舉顯示的指定值,如果不顯示指定值則預設從0開始,每個枚舉在前一個枚舉的值上+1。

3、枚舉是實值型別但是其並不是直接繼承實值型別的基底類型:System.ValueType,而是以下的繼承鏈:

System.Object->System.ValueType->System.Enum->具體枚舉

4、對於某個變數有3種或者3種以上的情況的時候應該使用枚舉而不是使用int或者string,因為這樣的代碼可讀性更強。

5、使用枚舉不會帶來什麼效能問題,由於其本質還是實值型別。

 

二、枚舉常見的各種使用方法

     在日常開發的過程中,枚舉可以幫我們解決很多問題,但是也會碰到許多問題,下面列舉了一些枚舉常見的使用方法:

1、可以將枚舉的值指定為另一個枚舉,且如果後續枚舉沒有指定值則會自動增加,如下代碼:

public enum StateEnum{     Opened=0,     Closed=1,     Error=Closed,         UnKnow}

可以看到上面的代碼中,Error的值是使用的和Closed一樣的值,而UnKnow並未指定值,這時根據枚舉的特性,UnKnow的值則應該是2。

 

2、枚舉數組之間的轉換,如果有2個定義類似或者相同的枚舉組成數組想進行轉換,一般來說是不行的(C#不支援這樣的轉換),而可以通過先將枚舉數組轉成Array然後再轉成相應的枚舉數組,如下代碼:

StateEnum1[] stateEnums=(StateEnum1[])(Array)new StateEnum2[3];

雖然這樣做可以將C#不支援的形式變成可能,但是並不推薦這麼做,因為這樣可能會出現不可預見的錯誤。

而對於枚舉的正常轉換都是可以通過Enum.Parse()進行轉換。

 

3、如果需要對枚舉進行組合使用(如按位計算),則需要使用FlagAttributes特性,如下代碼:

[Flags]  //屬於System.IO命名空間下public enum State{     Read=0,//000     Write=1,//001     Create=2,//010     Delete=4,//100

Allow=Read | Write } public void Test(State state) { if(state==State.Read | State.Write) { } }


一旦使用了Flags特性後,就可以像上面的代碼一樣對枚舉進行組合判斷,但需要注意的是,使用了Flags特性後必須為枚舉顯式的指定值,否則無法使用,同時顯式指定的值最好是2的次冪,如:0,1,2等,這樣可以保證組合的值不會重疊,具體可以查看MSDN:FlagsAttribute 類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.