最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#編程中枚舉類型的使用教程

 更新時(shí)間:2016年01月31日 17:14:12   投稿:goldensun  
這篇文章主要介紹了C#編程中枚舉類型的使用,是C#入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下


枚舉類型(也稱為枚舉)為定義一組可以賦給變量的命名整數(shù)常量提供了一種有效的方法。例如,假設(shè)您必須定義一個(gè)變量,該變量的值表示一周中的一天。該變量只能存儲七個(gè)有意義的值。若要定義這些值,可以使用枚舉類型。枚舉類型是使用 enum關(guān)鍵字聲明的。

enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; 

默認(rèn)情況下,枚舉中每個(gè)元素的基礎(chǔ)類型是 int。可以使用冒號指定另一種整數(shù)值類型,如前面的示例所示??梢酝ㄟ^轉(zhuǎn)換驗(yàn)證基礎(chǔ)數(shù)值與基礎(chǔ)類型,如下例所示。

Days today = Days.Monday;
int dayNumber =(int)today;
Console.WriteLine("{0} is day number #{1}.", today, dayNumber);

Months thisMonth = Months.Dec;
byte monthNumber = (byte)thisMonth;
Console.WriteLine("{0} is month number #{1}.", thisMonth, monthNumber);

輸出:

Monday is day number #1.
Dec is month number #11.

以下是使用枚舉而不使用數(shù)值類型的好處:
明確為客戶端代碼指定哪些值是變量的有效值。
在 Visual Studio 中,IntelliSense 列出定義的值。
如果未在枚舉數(shù)列表中指定元素的值,則值將自動按 1 遞增。在前面的示例中,Days.Sunday 的值為 0,Days.Monday 的值為 1,依此類推。創(chuàng)建新的 Days 對象時(shí),如果不顯式為其賦值,則它將具有默認(rèn)值 Days.Sunday (0)。創(chuàng)建枚舉時(shí),應(yīng)選擇最合理的默認(rèn)值并賦給它一個(gè)零值。這便使得只要在創(chuàng)建枚舉時(shí)未為其顯式賦值,則所創(chuàng)建的全部枚舉都將具有該默認(rèn)值。
如果變量 meetingDay 的類型為 Days,則只能將 Days 定義的某個(gè)值賦給它(無需顯式強(qiáng)制轉(zhuǎn)換)。如果會議日期更改,可以將 Days 中的新值賦給 meetingDay:

Days meetingDay = Days.Monday;
//...
meetingDay = Days.Friday;

注意:可以將任意整數(shù)值賦給 meetingDay。例如,代碼行 meetingDay = (Days) 42 不會產(chǎn)生錯(cuò)誤。但也不應(yīng)該這樣做,因?yàn)槟J(rèn)約定的是枚舉變量只容納枚舉定義的值之一。將任意值賦給枚舉類型的變量很有可能會導(dǎo)致錯(cuò)誤。
可以將任意值賦給枚舉類型的枚舉數(shù)列表中的元素,也可以使用計(jì)算值:

enum MachineState
{
  PowerOff = 0,
  Running = 5,
  Sleeping = 10,
  Hibernating = Sleeping + 5
}

枚舉類型作為位標(biāo)志
可以使用枚舉類型定義位標(biāo)志,從而使該枚舉類型的實(shí)例可以存儲枚舉數(shù)列表中定義的值的任意組合。(當(dāng)然,某些組合在您的程序代碼中可能沒有意義或不允許使用。)
創(chuàng)建位標(biāo)志枚舉的方法是應(yīng)用 System.FlagsAttribute 特性并適當(dāng)定義一些值,以便可以對這些值執(zhí)行 AND、OR、NOT 和 XOR 按位運(yùn)算。在位標(biāo)志枚舉中包含一個(gè)值為零(表示“未設(shè)置任何標(biāo)志”)的命名常量。如果零值不表示“未設(shè)置任何標(biāo)志”,則請不要為標(biāo)志指定零值。
在下面的示例中,定義了 Days 枚舉的另一個(gè)版本,命名為 Days2。 Days2 具有 Flags 特性,且它的每個(gè)值都是 2 的若干次冪,指數(shù)依次遞增。這樣,您將能夠創(chuàng)建值為 Days2.Tuesday 和 Days2.Thursday 的 Days2 變量。

[Flags]
enum Days2
{
  None = 0x0,
  Sunday = 0x1,
  Monday = 0x2,
  Tuesday = 0x4,
  Wednesday = 0x8,
  Thursday = 0x10,
  Friday = 0x20,
  Saturday = 0x40
}
class MyClass
{
  Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
}

若要在某個(gè)枚舉上設(shè)置標(biāo)志,請使用按位 OR 運(yùn)算符,如下面的示例所示:

// Initialize with two flags using bitwise OR.
meetingDays = Days2.Tuesday | Days2.Thursday;

// Set an additional flag using bitwise OR.
meetingDays = meetingDays | Days2.Friday;

Console.WriteLine("Meeting days are {0}", meetingDays);
// Output: Meeting days are Tuesday, Thursday, Friday

// Remove a flag using bitwise XOR.
meetingDays = meetingDays ^ Days2.Tuesday;
Console.WriteLine("Meeting days are {0}", meetingDays);
// Output: Meeting days are Thursday, Friday

若要確定是否設(shè)置了特定標(biāo)志,請使用按位 AND 運(yùn)算,如下面的示例所示:

// Test value of flags using bitwise AND.
bool test = (meetingDays & Days2.Thursday) == Days2.Thursday;
Console.WriteLine("Thursday {0} a meeting day.", test == true ? "is" : "is not");
// Output: Thursday is a meeting day.

。
使用 System.Enum 方法發(fā)現(xiàn)和操作枚舉值
所有枚舉都是 System.Enum 類型的實(shí)例。不能從 System.Enum 派生新類,但可以使用它的方法發(fā)現(xiàn)有關(guān)枚舉實(shí)例中的值的信息以及操作這些值。

string s = Enum.GetName(typeof(Days), 4);
Console.WriteLine(s);

Console.WriteLine("The values of the Days Enum are:");
foreach (int i in Enum.GetValues(typeof(Days)))
  Console.WriteLine(i);

Console.WriteLine("The names of the Days Enum are:");
foreach (string str in Enum.GetNames(typeof(Days)))
  Console.WriteLine(str);

相關(guān)文章

  • C#中XmlTextWriter讀寫xml文件詳細(xì)介紹

    C#中XmlTextWriter讀寫xml文件詳細(xì)介紹

    .NET中包含了很多支持XML的類,這些類使得程序員使用XML編程就如同理解XML文件一樣簡單。在這篇文章中,我將給出這樣的一個(gè)類的使用示例,這個(gè)類就是XmlTextWriter類
    2013-04-04
  • C#從數(shù)據(jù)庫讀取數(shù)據(jù)到DataSet并保存到xml文件的方法

    C#從數(shù)據(jù)庫讀取數(shù)據(jù)到DataSet并保存到xml文件的方法

    這篇文章主要介紹了C#從數(shù)據(jù)庫讀取數(shù)據(jù)到DataSet并保存到xml文件的方法,涉及C#操作DataSet保存到XML文件的技巧,需要的朋友可以參考下
    2015-04-04
  • C# WinForm實(shí)現(xiàn)鼠標(biāo)穿透功能

    C# WinForm實(shí)現(xiàn)鼠標(biāo)穿透功能

    在WinForm開發(fā)時(shí),會用到這樣一個(gè)場景,給屏幕增加水印Logo,但不影響畫面的操作,這里就會用到鼠標(biāo)穿透功能,下面我們就來學(xué)習(xí)一下鼠標(biāo)穿透功能的具體實(shí)現(xiàn)吧
    2023-11-11
  • C#自定義IP輸入框控件

    C#自定義IP輸入框控件

    這篇文章主要為大家詳細(xì)介紹了C#自定義IP輸入框控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C#圖像處理之邊緣檢測(Sobel)的方法

    C#圖像處理之邊緣檢測(Sobel)的方法

    這篇文章主要介紹了C#圖像處理之邊緣檢測(Sobel)的方法,使用自定義sobel算子函數(shù)實(shí)現(xiàn)對圖像邊緣的檢測功能,需要的朋友可以參考下
    2015-04-04
  • C#如何創(chuàng)建自定義特性

    C#如何創(chuàng)建自定義特性

    這篇文章主要介紹了C#如何創(chuàng)建自定義特性,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • C#圖片壓縮的實(shí)現(xiàn)方法

    C#圖片壓縮的實(shí)現(xiàn)方法

    一般在web應(yīng)用中,對客戶端提交上來的圖片肯定需要進(jìn)行壓縮的。尤其是比較大的圖片,如果不經(jīng)過壓縮會導(dǎo)致頁面變的很大,打開速度比較慢,當(dāng)然了如果是需要高質(zhì)量的圖片也得需要生產(chǎn)縮略圖。
    2013-02-02
  • C# 復(fù)制指定節(jié)點(diǎn)的所有子孫節(jié)點(diǎn)到新建的節(jié)點(diǎn)下

    C# 復(fù)制指定節(jié)點(diǎn)的所有子孫節(jié)點(diǎn)到新建的節(jié)點(diǎn)下

    這篇文章主要介紹了C# 復(fù)制指定節(jié)點(diǎn)的所有子孫節(jié)點(diǎn)到新建的節(jié)點(diǎn)下的相關(guān)資料,非常不錯(cuò)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2016-10-10
  • c#棧變化規(guī)則圖解示例(棧的生長與消亡)

    c#棧變化規(guī)則圖解示例(棧的生長與消亡)

    多數(shù)情況下我們不需要關(guān)心棧的變化,下文會給出一個(gè)具體的示例。另外,理解棧的變化對于理解作用域也有一定的好處,因?yàn)镃#的局部變量作用域是基于棧的。
    2013-11-11
  • c# base關(guān)鍵字的具體使用

    c# base關(guān)鍵字的具體使用

    base關(guān)鍵字用于從派生類中訪問基類的成員,本文主要介紹了c# base關(guān)鍵字的具體使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03

最新評論

宜宾市| 金山区| 巴彦淖尔市| 志丹县| 罗定市| 微博| 班戈县| 拉萨市| 淳安县| 革吉县| 望江县| 阿瓦提县| 万源市| 神池县| 闽清县| 渝北区| 迁安市| 通河县| 古丈县| 祁东县| 沅江市| 禹城市| 昌乐县| 锦屏县| 台东市| 天长市| 鄂托克前旗| 南阳市| 鸡西市| 中宁县| 平塘县| 许昌市| 佳木斯市| 临猗县| 商洛市| 当雄县| 东阿县| 壶关县| 北碚区| 牡丹江市| 井研县|