程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 懂得C#中的列舉(簡明易懂)

懂得C#中的列舉(簡明易懂)

編輯:C#入門知識

懂得C#中的列舉(簡明易懂)。本站提示廣大學習愛好者:(懂得C#中的列舉(簡明易懂))文章只能為提供參考,不一定能成為您想要的結果。以下是懂得C#中的列舉(簡明易懂)正文


1、在進修列舉之前,起首來聽聽列舉的長處。
  1、列舉可以或許使代碼加倍清楚,它許可應用描寫性的稱號表現整數值。

  2、列舉使代碼更容易於保護,有助於確保給變量指定正當的、希冀的值。

  3、列舉使代碼更容易輸出。

2、列舉解釋

1、簡略列舉

●列舉應用enum症結字來聲明,與類同級。列舉自己可以有潤飾符,但列舉的成員一直是公共的,不克不及有拜訪潤飾符。列舉自己的潤飾符僅能應用public和internal。
●列舉是值類型,隱式繼續自System.Enum,不克不及手動修正。System.Enum自己是援用類型,繼續自System.ValueType。
●列舉都是隱式密封的,不許可作為基類派生子類。
●列舉類型的列舉成員均為靜態,且默許為Int32類型。
●每一個列舉成員均具有相干聯的常數值。此值的類型就是列舉的底層數據類型。每一個列舉成員的常數值必需在該列舉的底層數據類型的規模以內。假如沒有明白指定底層數據類型則默許的數據類型是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

3、列舉的應用建議

  當參數、前往值、變量等類型可使列舉,盡可能應用列舉(要留意斟酌分類的穩固性)

  年夜多半情形下都可使用int類型列舉,以下情形除外。

  列舉能夠被年夜量頻仍的應用,這時候為了勤儉空間可使用小於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
    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved