列舉是什麼呢?列舉是乙個值型別,包含一組命名的常量,如以下的**:
public enum color
這裡是最簡單的定義列舉的方式,沒有設定任何的東西,所以預設情況下,enum的型別是int型的,並且是從0開始往下遞增地,但是我們可以修改以上說的東西,比如以下**:
public enum color:short
我們可以強制將數字轉換成列舉,將列舉強制轉換成數字。
color tmpc = (color)2;//數字轉換成列舉
short num = (short)color.red;//列舉轉換成數字
我們還可以使用enum型別把多個選項分配給乙個變數,而不僅僅是乙個列舉常量。但是有乙個特殊要求就是常量的值必須是不同的位,[flags]屬性來設定列舉就有以上說的特性,接下來定義乙個**給大家示範一下:
public enum color:short
這時color乙個變數就可以代表多個值了,color tmpc = color.red | color.green, 去輸出tmpc的值,結果是red,green,而強制轉換出來的數值是0b11,當color tmpc = color.blue | color.green,去輸出列印的時候,結果是blue_green,是不是感覺有點意思,原因是我們已經定義了這個值。
使用列舉,類enum有時非常有助於動態獲取列舉型別的資訊,列舉提供了辦法來解析字串,獲得相應的列舉常數,獲得列舉型別的所有名稱和值。下面**使用字串和enum.tryparse來獲得相應值,具體**如下:
color tmpc;
if(enum.tryparse("red",out tmpc))
");}
enum.getnames方法返回乙個包含所有列舉名的字串陣列:
foreach (var tmpc in enum.getnames(typeof(color)))
enum.getvalues方法返回乙個包含所有列舉名的數值陣列:
foreach (var tmpc in enum.getvalues(typeof(color)))
小技巧 指數形式的列舉
指數形式的列舉一般使用遞迴來實現。通常,求乙個集合的全組合 也就是全部子集 的時候,常用指數型列舉。原理很簡單,每層遞迴只有兩個分支 選還是不選。然後對於每次到達遞迴出口的時候,對當前的組合判斷一下合不合法即可。對於回溯來講,可以使用各種stl實現 反正都是暴力,不用在意刪除的那點時間複雜度 比如v...
列舉平方數 小技巧
給出長度為n的序列a,求有多少對數對 i,j 1 i j n 滿足 ai aj 為完全平方數。第一行乙個整數 n 1 n 105 第二行 n 個整數 ai 1 ai 105 輸出乙個整數,表示滿足上述條件的數對個數。示例1 複製3 1 3 6 複製2 滿足條件的有 1,2 2,3 兩對。有幾個需要注...
C 語言使用技巧 列舉
例如有public enum animalenum enum to string animalenum.dog.tostring dog enum to int int i int animalenum.dog 遍歷列舉 反射 enum.getnames 字串格式 type type typeof ...