亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

理解C#中的枚舉(簡明易懂)

 更新時間:2015年05月19日 09:34:02   投稿:junjie  
這篇文章主要介紹了理解C#中的枚舉(簡明易懂),本文講解了枚舉的優(yōu)點、枚舉說明、枚舉的類型、枚舉的使用建議等內容,需要的朋友可以參考下

一、在學習枚舉之前,首先來聽聽枚舉的優(yōu)點。
  1、枚舉能夠使代碼更加清晰,它允許使用描述性的名稱表示整數值。

  2、枚舉使代碼更易于維護,有助于確保給變量指定合法的、期望的值。

  3、枚舉使代碼更易輸入。

二、枚舉說明

1、簡單枚舉

●枚舉使用enum關鍵字來聲明,與類同級。枚舉本身可以有修飾符,但枚舉的成員始終是公共的,不能有訪問修飾符。枚舉本身的修飾符僅能使用public和internal。
●枚舉是值類型,隱式繼承自System.Enum,不能手動修改。System.Enum本身是引用類型,繼承自System.ValueType。
●枚舉都是隱式密封的,不允許作為基類派生子類。
●枚舉類型的枚舉成員均為靜態(tài),且默認為Int32類型。
●每個枚舉成員均具有相關聯(lián)的常數值。此值的類型就是枚舉的底層數據類型。每個枚舉成員的常數值必須在該枚舉的底層數據類型的范圍之內。如果沒有明確指定底層數據類型則默認的數據類型是int類型。
●枚舉成員不能相同,但枚舉的值可以相同。
●枚舉最后一個成員的逗號和大括號后面的分號可以省略

C#提供類一個類來方便操作枚舉,下面給出這個類的常用方法:


要顯示指定枚舉的底層數據類型很簡單,只需在聲明枚舉的時候加個冒號,后面緊跟要指定的數據類型。

復制代碼 代碼如下:

    enum sex : byte  //顯示指定枚舉的底層數據類型
    {
        male,
        female,  //此逗號可以省略
    };        //此分號可以省略'

  顯式設置枚舉的成員常量值,默認是從0開始,逐個遞增的。但是以下例子卻設置成了1,2,3,4,5,6,7,0。而且成員值可以一樣的。

復制代碼 代碼如下:

    enum Week
    {
        Monday = 1,
        Tuesday = 2,
        Wednesday = 3,
        Sunday = 0,
     Everyday = 1  //成員的值可以設置成一樣的,但是成員不行
    }
  Console.WriteLine((int)Week.Monday);  //獲取值

  示例,由枚舉值獲取枚舉名稱與由枚舉名稱獲取枚舉值

復制代碼 代碼如下:

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Enum.GetName(typeof(Man),1));  //還是 劉備 (由值獲取名字)

            string[] array1 = Enum.GetNames(typeof(Man));
            Console.WriteLine(array1[1]);   //關羽

            Array array2 = Enum.GetValues(typeof(Man));
            Console.WriteLine(array2.GetValue(1));  //還是關羽

            Type t = Enum.GetUnderlyingType(typeof(Man));
            Console.WriteLine(t);       //輸出 Int32

            //由值獲取內容
            int i = 1;
            string Name = Enum.Parse(typeof(Man), i.ToString()).ToString();     //此時 Name="劉備"
            Console.WriteLine(Name);

            //由值獲取內容
            string Name2 = "關羽";
            int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2));     //此時 j=2
            Console.WriteLine(j);

            Console.ReadKey();
        }
    }

    enum Man
    {
        劉備 = 1,
        關羽 = 2,
        張飛 = 3
    }

2、標志枚舉

  標志枚舉要在頂部加[System.Flags]特性進行聲明。而且枚舉支持組合運算。先來看個例子

復制代碼 代碼如下:

class Program
    {
        static void Main(string[] args)
        {
            var man = Week.白 | Week.美;  //賦值為101    計算方法001或上100,結果是101
            Console.WriteLine((int)man);
            if ((man & Week.白) == Week.白)       //101 man
            {                                    //001 白 逐位相與,
                Console.WriteLine("此人白");      //001 如果結果是白,就可以反推出man包含 白
            }
            else
            {
                Console.WriteLine("此人黑");
            }
            Console.ReadKey();
        }
    }

    [System.Flags]
    public enum Week
    {
        白 = 1,  //001
        富 = 2,  //010
        美 = 4,  //100
    }

 這種位運算是非常有用的,在sql語句里也支持位運算。也就是說,把一個枚舉運算后的結果存入數據庫之后,還能夠按照你的要求讀取出來。比如:

  將一個"白美"存如數據庫的值存入數據庫,那么存入去的就是整型5。

  那么我想讀出所有的"白"數據列表怎么讀呢?白,可以是純白"1",也是是白富3,可以是白美5,也可以是白富美7,你可以用in來讀,但是更好的方法是在sql語句中同樣使用位運算。

復制代碼 代碼如下:

select * from Table1 where Tag & 1 = 1  //Tag是列名

select * from Table1 where  Tag | 1 = Tag

三、枚舉的使用建議

  當參數、返回值、變量等類型可以使枚舉,盡量使用枚舉(要注意考慮分類的穩(wěn)定性)

  大多數情況下都可以使用int類型枚舉,下列情況除外。

  枚舉可能被大量頻繁的使用,這時為了節(jié)約空間可以使用小于int類型的枚舉。

  標志枚舉,且標志多于32個。

  下面寫一個:枚舉綁定MVC3下拉列表的示例:

  控制器代碼:

復制代碼 代碼如下:

namespace MvcStart.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult GetSexList()
        {
            Dictionary<string, int> Sexlist = new Dictionary<string, int>();
            string[] keys = Enum.GetNames(typeof(sex));
            Array values = Enum.GetValues(typeof(sex));

            for (int i = 0; i < keys.Length; i++)
            {
                Sexlist.Add(keys[i], (int)values.GetValue(i));
            }

            return View(Sexlist);
        }
    }

    public enum sex
    {
        male = 1,
        female = 2,
        other = 3
    }
}

視圖代碼:

復制代碼 代碼如下:

@model Dictionary<string, int>
<select>
    @foreach(var item in @Model)
    {
        <option value="@item.Value">@item.Key</option>
    }
</select>

生成的HTML代碼:

復制代碼 代碼如下:

<select>
        <option value="1">male</option>
        <option value="2">female</option>
        <option value="3">other</option>
</select>

再來一個例子,獲取枚舉描述

復制代碼 代碼如下:

public static class GetDescription
    {
        /// <summary>
        /// 獲取描述信息
        /// </summary>
        /// <param name="en"></param>
        /// <returns></returns>
        public static string description(this Enum en)
        {
            Type type = en.GetType();
            MemberInfo[] memInfo = type.GetMember(en.ToString());
            if (memInfo != null && memInfo.Length > 0)
            {
                object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
                if (attrs != null && attrs.Length > 0)
                    return ((DescriptionAttribute)attrs[0]).Description;
            }
            return en.ToString();
        }
    }

    public enum Sex
    {
        [Description("男")]
        man = 1,
        [Description("女")]
        woman = 2,
        [Description("其他")]
        other = 3
    }

相關文章

  • 詳解ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+ObjectArx2008)

    詳解ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+Object

    這篇文章主要介紹了ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+ObjectArx2008),本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • C#讀取配置文件的方法匯總

    C#讀取配置文件的方法匯總

    本文給大家介紹的是使用C#讀取配置文件的方法,個人給大家總結了6種,余下的以后再更新,有需要的小伙伴可以參考下。
    2015-06-06
  • C# Socket實現簡單控制臺案例

    C# Socket實現簡單控制臺案例

    這篇文章主要為大家分享了C# Socket簡單的控制臺案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • C#用匿名方法定義委托的實現方法

    C#用匿名方法定義委托的實現方法

    這篇文章主要介紹了C#用匿名方法定義委托的實現方法,涉及C#匿名方法與委托的相關使用技巧,需要的朋友可以參考下
    2015-06-06
  • c# 基于Titanium爬取微信公眾號歷史文章列表

    c# 基于Titanium爬取微信公眾號歷史文章列表

    這篇文章主要介紹了c# 基于Titanium爬取微信公眾號歷史文章列表,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • c# for循環(huán)中創(chuàng)建線程執(zhí)行問題

    c# for循環(huán)中創(chuàng)建線程執(zhí)行問題

    這篇文章主要介紹了有關c# for循環(huán)中創(chuàng)建線程執(zhí)行問題,下面文章將將以舉例的方式展開for循環(huán)中創(chuàng)建線程執(zhí)行問題的內容,需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • C#使用Tesseract進行Ocr識別的方法實現

    C#使用Tesseract進行Ocr識別的方法實現

    本文主要介紹了C#使用Tesseract進行Ocr識別的方法實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C#中的匿名函數、lambda表達式解讀

    C#中的匿名函數、lambda表達式解讀

    這篇文章主要介紹了C#中的匿名函數、lambda表達式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 可空類型Nullable<T>用法詳解

    可空類型Nullable<T>用法詳解

    本文詳細講解了可空類型Nullable<T>的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 關于C#中排序函數的總結

    關于C#中排序函數的總結

    下面小編就為大家?guī)硪黄P于C#中排序函數的總結。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05

最新評論