<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C# 枚舉

      原博地址:http://www.rzrgm.cn/kissdodog/archive/2013/01/16/2863515.html

      一、在學習枚舉之前,首先來聽聽枚舉的優點。

        1、枚舉能夠使代碼更加清晰,它允許使用描述性的名稱表示整數值。

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

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

      二、枚舉說明

        1、簡單枚舉

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

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

      方法 名稱
      CompareTo 將此實例與指定對象進行比較并返回一個對二者的相對值的指示
      Equals 指示此實例是否等于指定的對象
      Format 根據指定格式將指定枚舉類型的指定值轉換為其等效的字符串表示形式
      GetName 在指定枚舉中檢索具有指定值的常數的名稱
      GetNames 檢索指定枚舉中常數名稱的數組
      GetTypeCode  返回此實例的基礎 TypeCode
      GetUnderlyingType 返回指定枚舉的基礎類型
      GetValues 索指定枚舉中常數值的數組
      HasFlag 確定當前實例中是否設置了一個或多個位域
      IsDefined 返回指定枚舉中是否存在具有指定值的常數的指示
      Parse 將一個或多個枚舉常數的名稱或數字值的字符串表示轉換成等效的枚舉對象。 一個參數指定該操作是否不區分大小寫
      TryParse 將一個或多個枚舉常數的名稱或數字值的字符串表示轉換成等效的枚舉對象。 用于指示轉換是否成功的返回值

       

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

        顯式設置枚舉的成員常量值,默認是從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

       

      三、枚舉的使用建議

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

        大多數情況下都可以使用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
          }
      復制代碼

       

      posted @ 2018-01-11 11:07  Rachel_Diary  閱讀(280)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 伊在人间香蕉最新视频| 亚洲中文字幕国产精品| 精品亚洲国产成人| 亚洲人黑人一区二区三区| 深夜av在线免费观看| 亚洲国产天堂一区二区三区 | 国产片av在线观看国语| 成年女人片免费视频播放A| 中文字幕国产精品资源| 国产在线线精品宅男网址| 国产精品日日摸夜夜添夜夜添无码| 凉城县| 亚洲午夜福利精品无码不卡| 久草国产视频| 99在线精品国自产拍中文字幕| 亚洲乱码日产精品一二三| 99riav精品免费视频观看| 亚洲乱码精品久久久久..| 国产永久免费高清在线观看| 欧美变态口味重另类在线视频| 国产精品三级爽片免费看| 欧美熟妇乱子伦XX视频| 99久久精品久久久久久婷婷| 日韩高清在线亚洲专区国产| 亚洲国产精品特色大片观看完整版| 伦理片午夜视频在线观看| 少妇高潮喷水正在播放 | 国产成人亚洲综合91精品| 国产精品乱子乱xxxx| 久久精品视频一二三四区| 国产精品中文字幕免费| 在熟睡夫面前侵犯我在线播放| 亚洲av乱码一区二区| 一区二区中文字幕视频| 国产福利在线观看免费第一福利| 亚洲av永久一区二区| 国产成人欧美一区二区三区在线| 国产午夜精品无码一区二区| 国产精品久久久久7777| 久久久久青草线蕉综合超碰| 国产熟睡乱子伦视频在线播放 |