C# 枚舉的使用簡(jiǎn)介
枚舉這個(gè)名詞大家都聽(tīng)過(guò),很多小伙伴也使用過(guò),
那么枚舉在開(kāi)發(fā)中能做什么,使用它后能給程序代碼帶來(lái)什么改變,為什么用枚舉。
各位看官且坐下,聽(tīng)我一一道來(lái)。
為什么使用枚舉?
1、枚舉能夠使代碼更加清晰,它允許使用描述性的名稱表示整數(shù)值。
2、枚舉使代碼更易于維護(hù),有助于確保給變量指定合法的、期望的值。
3、枚舉使代碼更易輸入和讀取。
枚舉有哪些用法?
1、簡(jiǎn)單枚舉
2、標(biāo)志枚舉
1、簡(jiǎn)單枚舉
- 枚舉使用enum關(guān)鍵字來(lái)聲明,與類同級(jí)。枚舉本身可以有修飾符,但枚舉的成員始終是公共的,不能有訪問(wèn)修飾符。枚舉本身的修飾符僅能使用public和internal。
- 枚舉是值類型,隱式繼承自System.Enum,不能手動(dòng)修改。System.Enum本身是引用類型,繼承自System.ValueType。
- 枚舉都是隱式密封的,不允許作為基類派生子類。
- 枚舉類型的枚舉成員均為靜態(tài),且默認(rèn)為Int32類型。
- 每個(gè)枚舉成員均具有相關(guān)聯(lián)的常數(shù)值。此值的類型就是枚舉的底層數(shù)據(jù)類型。每個(gè)枚舉成員的常數(shù)值必須在該枚舉的底層數(shù)據(jù)類型的范圍之內(nèi)。如果沒(méi)有明確指定底層數(shù)據(jù)類型則默認(rèn)的數(shù)據(jù)類型是int類型。
- 枚舉成員不能相同,但枚舉的值可以相同。
- 枚舉最后一個(gè)成員的逗號(hào)和大括號(hào)后面的分號(hào)可以省略
C#提供類一個(gè)類來(lái)方便操作枚舉,下面給出這個(gè)類的常用方法:
C#枚舉常用方法
| 方法 | 名稱 |
| CompareTo | 將此實(shí)例與指定對(duì)象進(jìn)行比較并返回一個(gè)對(duì)二者的相對(duì)值的指示 |
| Equals | 指示此實(shí)例是否等于指定的對(duì)象 |
| Format | 根據(jù)指定格式將指定枚舉類型的指定值轉(zhuǎn)換為其等效的字符串表示形式 |
| GetName | 在指定枚舉中檢索具有指定值的常數(shù)的名稱 |
| GetNames | 檢索指定枚舉中常數(shù)名稱的數(shù)組 |
| GetNames | 檢索指定枚舉中常數(shù)名稱的數(shù)組 |
| GetTypeCode | 返回此實(shí)例的基礎(chǔ) TypeCode |
| GetUnderlyingType | 返回指定枚舉的基礎(chǔ)類型 |
| GetValues | 索指定枚舉中常數(shù)值的數(shù)組 |
| HasFlag | 確定當(dāng)前實(shí)例中是否設(shè)置了一個(gè)或多個(gè)位域 |
| IsDefined | 返回指定枚舉中是否存在具有指定值的常數(shù)的指示 |
| Parse |
將一個(gè)或多個(gè)枚舉常數(shù)的名稱或數(shù)字值的字符串表示轉(zhuǎn)換成等效的枚舉對(duì)象。 一個(gè)參數(shù)指定該操作是否不區(qū)分大小寫(xiě) |
| TryParse |
將一個(gè)或多個(gè)枚舉常數(shù)的名稱或數(shù)字值的字符串表示轉(zhuǎn)換成等效的枚舉對(duì)象。 用于指示轉(zhuǎn)換是否成功的返回值 |
如果要顯示指定枚舉的底層數(shù)據(jù)類型很簡(jiǎn)單,只需在聲明枚舉的時(shí)候加個(gè)冒號(hào),后面緊跟要指定的數(shù)據(jù)類型(可指定類型有:byte、sbyte、short、ushort、int、uint、long、ulong)。
顯式設(shè)置枚舉的成員常量值,默認(rèn)是從0開(kāi)始,逐個(gè)遞增的。但是以下例子卻設(shè)置成了1,2,3,0。而且成員值可以一樣的。
如下示例:由枚舉值獲取枚舉名稱與由枚舉名稱獲取枚舉值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace enumApplication
{
class Program
{
static void Main(string[] args)
{
//輸出方式一:
Console.WriteLine("我是四大名著之一的:" + Enum.GetName(typeof(Man), 1)); //西游記(是哪個(gè)名著由值獲?。?
//輸出方式二:
string[] array1 = Enum.GetNames(typeof(Man));
Console.WriteLine("我是四大名著之一的:" + array1[2]); //紅樓夢(mèng)(是哪個(gè)名著由值獲?。?
//輸出方式三:
Array array2 = Enum.GetValues(typeof(Man));
Console.WriteLine("我是四大名著之一的:" + array2.GetValue(3)); //三國(guó)演義(是哪個(gè)名著由值獲?。?
//輸出方式四:
Type t = Enum.GetUnderlyingType(typeof(Man));
Console.WriteLine("我輸出的是值類型:"+t); //輸出 Int32
//輸出方式五:由值獲取內(nèi)容
int i = 0;
string Name = Enum.Parse(typeof(Man), i.ToString()).ToString(); //此時(shí) Name="水滸傳"
Console.WriteLine("我是四大名著之一的:" + Name);
//輸出方式六:由值獲取內(nèi)容
string Name2 = "紅樓夢(mèng)";
int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2)); //此時(shí) j=2
Console.WriteLine("我是《紅樓夢(mèng)》對(duì)應(yīng)的值序號(hào):"+j);
Console.ReadKey();
}
enum Man:int //四大名著枚舉
{
西游記 = 1,
紅樓夢(mèng) = 2,
三國(guó)演義 = 3,
水滸傳 = 0
}
}
}
2、標(biāo)志枚舉
標(biāo)志枚舉要在頂部加[System.Flags]特性進(jìn)行聲明。而且枚舉支持組合運(yùn)算。
這種位運(yùn)算是非常有用的,在sql語(yǔ)句里也支持位運(yùn)算。也就是說(shuō),把一個(gè)枚舉運(yùn)算后的結(jié)果存入數(shù)據(jù)庫(kù)之后,還能夠按照你的要求讀取出來(lái)。比如:
將一個(gè)"高帥"存如數(shù)據(jù)庫(kù)的值存入數(shù)據(jù)庫(kù),那么存入去的就是整型5。
select * from Table where Column & 1 = 1 //Column 是列名 select * from Table1 where Column | 1 = Column
如下demo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace enumApplication
{
class Program
{
static void Main(string[] args)
{
var man = People.高 | People.帥; //賦值為101 計(jì)算方法001或上100,結(jié)果是101
Console.WriteLine("高和帥的枚舉值和為:"+(int)man);
if ((man & People.高) == People.高) //101 man
{ //001 高 逐位相與,
Console.WriteLine("此人:高"); //001 如果結(jié)果是高,就可以反推出man包含 高
}
else
{
Console.WriteLine("此人:矮");
}
Console.ReadKey();
}
[System.Flags]
public enum People:int
{
高 = 1, //001
富 = 2, //010
帥 = 4, //100
}
}
}
3、枚舉使用的一些建議
- 作為參數(shù)、返回值、變量等類型可以使枚舉,盡量使用枚舉(要注意考慮分類的穩(wěn)定性)
- 大多數(shù)情況下都可以使用int類型枚舉,下列情況除外。
- 枚舉可能被大量頻繁的使用,這時(shí)為了節(jié)約空間可以使用小于int類型的枚舉。
- 標(biāo)志枚舉,且標(biāo)志多于32個(gè)。
枚舉用好了還是蠻方便的,大家不妨去試試。
以上就是C# 枚舉的使用簡(jiǎn)介的詳細(xì)內(nèi)容,更多關(guān)于C# 枚舉的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#查找素?cái)?shù)實(shí)現(xiàn)方法
這篇文章主要介紹了C#查找素?cái)?shù)實(shí)現(xiàn)方法,程序中有很多使用的功能模塊,非常適合C#初學(xué)者學(xué)習(xí)借鑒,需要的朋友可以參考下2014-08-08
C# dump系統(tǒng)lsass內(nèi)存和sam注冊(cè)表詳細(xì)
這篇文章主要介紹了C# dump系統(tǒng)lsass內(nèi)存和sam注冊(cè)表,在這里選擇 C# 的好處是體積小,結(jié)合 loadAssembly 方便免殺,希望對(duì)讀者們有所幫助2021-09-09
一步步教你如何創(chuàng)建第一個(gè)C#項(xiàng)目
這篇文章主要給大家介紹了關(guān)于如何創(chuàng)建第一個(gè)C#項(xiàng)目的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-12-12

