日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

C#的Enum——枚举

發(fā)布時(shí)間:2024/1/3 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 C#的Enum——枚举 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

枚舉

  枚舉類型聲明為一組相關(guān)的符號(hào)常數(shù)定義了一個(gè)類型名稱。枚舉用于“多項(xiàng)選擇”場(chǎng)合,就是程序運(yùn)行時(shí)從編譯時(shí)已經(jīng)設(shè)定的固定數(shù)目的“選擇”中做出決定。

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

enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

默認(rèn)情況下,枚舉中每個(gè)元素的基礎(chǔ)類型是 int。可以使用冒號(hào)指定另一種整數(shù)值類型。
  如果不為枚舉數(shù)列表中的元素指定值,則它們的值將以
1 為增量自動(dòng)遞增。在前面的示例中,Days.Sunday 的值為 0,Days.Monday 的值為 1,依此類推。創(chuàng)建新的 Days
對(duì)象時(shí),如果不顯式為其賦值,則它將具有默認(rèn)值 Days.Sunday
(0)。創(chuàng)建枚舉時(shí),應(yīng)選擇最合理的默認(rèn)值并賦給它一個(gè)零值。這便使得只要在創(chuàng)建枚舉時(shí)未為其顯式賦值,則所創(chuàng)建的全部枚舉都將具有該默認(rèn)值。枚舉中大小寫敏感,但是建議不要這樣。

  注意:System.Enum
類型是所有枚舉類型的抽象基類(它是一種與枚舉類型的基礎(chǔ)類型不同的獨(dú)特類型),并且從 System.Enum
繼承的成員在任何枚舉類型中都可用。存在從任何枚舉類型到System.Enum 的裝箱轉(zhuǎn)換,并且存在從 System.Enum
到任何枚舉類型的取消裝箱轉(zhuǎn)換。System.Enum
本身不是枚舉類型。相反,它是一個(gè)類類型,所有枚舉類型都是從它派生的。類型 System.Enum 從類型
System.ValueType派生,而后者又從類型 object 派生。在運(yùn)行時(shí),類型 System.Enum 的值可以是 null
或是對(duì)任何枚舉類型的裝了箱的值的引用。

枚舉的優(yōu)點(diǎn):
1、枚舉可以使代碼更易于維護(hù),有助于確保給變量指定合法的、期望的值。
2、枚舉使代碼更清晰,允許用描述性的名稱表示整數(shù)值,而不是用含義模糊的數(shù)來(lái)表示。
3、枚舉使代碼更易于鍵入。在給枚舉類型的實(shí)例賦值時(shí),VS.NET IDE會(huì)通過(guò)IntelliSense彈出一個(gè)包含可接受值的列表框,減少了按鍵次數(shù),并能夠讓我們回憶起可能的值

枚舉實(shí)例

  聲明:

public enum TimeOfDay
{
    Moning = 0,
    Afternoon = 1,
    Evening = 2,
};

使用:

public string getTimeOfDay(TimeOfDay time)
    {
        string result = string.Empty;
        switch (time)
        {
            case TimeOfDay.Moning:
                result = "上午";
                break;
            case TimeOfDay.Afternoon:
                result = "下午";
                break;
            case TimeOfDay.Evening:
                result = "晚上";
                break;
            default:
                result = "未知";
                break;
        }
        return result;
    }

枚舉方法

1、獲取枚舉字符串

TimeOfDay time = TimeOfDay.Afternoon;

Console.WriteLine(time.ToString());//輸出:Afternoon

2、Enum.Parse()方法。這個(gè)方法帶3個(gè)參數(shù),第一個(gè)參數(shù)是要使用的枚舉類型。其語(yǔ)法是關(guān)鍵字typeof后跟放在括號(hào)中的枚舉類名。typeof運(yùn)算符將在第5章詳細(xì)論述。第二個(gè)參數(shù)是要轉(zhuǎn)換的字符串,第三個(gè)參數(shù)是一個(gè)bool,指定在進(jìn)行轉(zhuǎn)換時(shí)是否忽略大小寫。最后,注意Enum.Parse()方法實(shí)際上返回一個(gè)對(duì)象引用——我們需要把這個(gè)字符串顯式轉(zhuǎn)換為需要的枚舉類型(這是一個(gè)取消裝箱操作的例子)。對(duì)于上面的代碼,將返回1,作為一個(gè)對(duì)象,對(duì)應(yīng)于TimeOfDay.Afternoon的枚舉值。在顯式轉(zhuǎn)換為int時(shí),會(huì)再次生成1。

TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);

Console.WriteLine((int)time2);//輸出1

3、得到枚舉的某一值對(duì)應(yīng)的名稱

lbOne.Text = Enum.GetName(typeof(TimeOfDay), 0);
lbOne.Text = ((TimeOfDay)0).ToString();//返回:Morning

兩種方法都能實(shí)現(xiàn),但是當(dāng)其值越界(不是枚舉所列出的值),就有一定的區(qū)別了。大家可以根據(jù)自己的需求不同,選擇合適的方法。

lbCon.Text = ((TimeOfDay)5).ToString(); //返回:5,如果越界返回原值

this.lbGetName.Text = Enum.GetName(typeof(TimeOfDay), 5); //返回:空字符串,如果越界返回空字符串

4、得到枚舉的所有的值

foreach (int i in Enum.GetValues(typeof(TimeOfDay)))
            lbValues.Text += i.ToString();

5、枚舉所有的名稱

foreach(string temp in Enum.GetNames(typeof(TimeOfDay)))
            lbNames.Text+=temp;

枚舉和常量

  優(yōu)先考慮枚舉。

  在C#中,枚舉的真正強(qiáng)大之處是它們?cè)诤笈_(tái)會(huì)實(shí)例化為派生于基類System.Enum的結(jié)構(gòu)。這表示可以對(duì)它們調(diào)用方法,執(zhí)行有用的任務(wù)。注意因?yàn)?NET Framework的執(zhí)行方式,在語(yǔ)法上把枚舉當(dāng)做結(jié)構(gòu)是不會(huì)有性能損失的。實(shí)際上,一旦代碼編譯好,枚舉就成為基本類型,與int和float類似。

  但是在實(shí)際應(yīng)用中,你也許會(huì)發(fā)現(xiàn),我們經(jīng)常用英語(yǔ)定義枚舉類型,因?yàn)殚_(kāi)發(fā)工具本來(lái)就是英文開(kāi)發(fā)的,美國(guó)人用起來(lái),就直接能夠明白枚舉類型的含義。其實(shí),我們?cè)陂_(kāi)發(fā)的時(shí)候就多了一步操作,需要對(duì)枚舉類型進(jìn)行翻譯。沒(méi)辦法,誰(shuí)讓編程語(yǔ)言是英語(yǔ)寫的,如果是漢語(yǔ)寫的,那我們也就不用翻譯了,用起枚舉變得很方便了。舉個(gè)簡(jiǎn)單的例子,TimeOfDay.Morning一看到Morning,美國(guó)人就知道是上午,但是對(duì)于中國(guó)的使用者來(lái)說(shuō),可能有很多人就看不懂,這就需要我們進(jìn)行翻譯、解釋,就向上面的getTimeOfDay()的方法,其實(shí)就是做了翻譯工作。所以,在使用枚舉的時(shí)候,感覺(jué)到并不是很方便,有的時(shí)候我們還是比較樂(lè)意創(chuàng)建常量,然后在類中,聲明一個(gè)集合來(lái)容納常量和其意義。

  使用常量定義:這種方法固然可行,但是不能保證傳入的參數(shù)day就是實(shí)際限定的。

using System;
using System.Collections.Generic;

public class TimesOfDay
{
    public const int Morning = 0;
    public const int Afternoon = 1;
    public const int Evening = 2;
    public static Dictionary<int, string> list;
    /// <summary>
    /// 獲得星期幾
    /// </summary>
    /// <param name="day"></param>
    /// <returns></returns>
    public static string getTimeNameOfDay(int time)
    {
        if (list == null || list.Count <= 0)
        {
            list = new Dictionary<int, string>();
            list.Add(Morning, "上午");
            list.Add(Afternoon, "下午");
            list.Add(Evening, "晚上");
        }

        return list[time];
    }
}

以上圖片由“圖斗羅”提供

總結(jié)

以上是生活随笔為你收集整理的C#的Enum——枚举的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。