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

快速學習c# 枚舉

 更新時間:2020年06月10日 11:27:33   作者:逆心  
這篇文章主要介紹了c# 枚舉的相關知識,文中講解非常細致,示例代碼幫助大家學習,感興趣的朋友可以了解下

一、在學習枚舉之前,首先來聽聽枚舉的優(yōu)點。

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

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

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

二、枚舉說明

  1、簡單枚舉

(1)枚舉使用enum關鍵字來聲明,與類同級。枚舉本身可以有修飾符,但枚舉的成員始終是公共的,不能有訪問修飾符。枚舉本身的修飾符僅能使用public和internal。

(2)枚舉是值類型,隱式繼承自System.Enum,不能手動修改。System.Enum本身是引用類型,繼承自System.ValueType。

(3)枚舉都是隱式密封的,不允許作為基類派生子類。

(4)枚舉類型的枚舉成員均為靜態(tài),且默認為Int32類型。

(5)每個枚舉成員均具有相關聯(lián)的常數值。此值的類型就是枚舉的底層數據類型。每個枚舉成員的常數值必須在該枚舉的底層數據類型的范圍之內。如果沒有明確指定底層數據類型則默認的數據類型是int類型。

(6)枚舉成員不能相同,但枚舉的值可以相同。

(7)枚舉最后一個成員的逗號和大括號后面的分號可以省略

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

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

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

 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
 }

以上就是快速學習c# 枚舉的詳細內容,更多關于c# 枚舉的資料請關注腳本之家其它相關文章!

相關文章

  • C#正方形圖片的繪制方法

    C#正方形圖片的繪制方法

    這篇文章主要為大家詳細介紹了C#正方形圖片的繪制方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C#實現(xiàn)listview Group收縮擴展的方法

    C#實現(xiàn)listview Group收縮擴展的方法

    這篇文章主要介紹了C#實現(xiàn)listview Group收縮擴展的方法,結合實例形式分析了listview控件的相關使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-03-03
  • C# 中文簡體轉繁體實現(xiàn)代碼

    C# 中文簡體轉繁體實現(xiàn)代碼

    C# 中文簡體轉繁體實現(xiàn)代碼,需要的朋友可以參考一下
    2013-02-02
  • C# 檢索不區(qū)分大小寫并高亮顯示實例詳解

    C# 檢索不區(qū)分大小寫并高亮顯示實例詳解

    這篇文章主要介紹了C# 檢索不區(qū)分大小寫并高亮顯示實例詳解的相關資料,需要的朋友可以參考下
    2017-01-01
  • c# DataView.ToTable()方法 去除表的重復項問題

    c# DataView.ToTable()方法 去除表的重復項問題

    這篇文章主要介紹了c# DataView.ToTable()方法 去除表的重復項問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C#代碼性能測試類(簡單實用)

    C#代碼性能測試類(簡單實用)

    這篇文章主要介紹了C#代碼性能測試類(簡單實用),本文直接給出實現(xiàn)代碼和使用示例,需要的朋友可以參考下
    2015-06-06
  • C#自定義簽名章實現(xiàn)方法

    C#自定義簽名章實現(xiàn)方法

    這篇文章主要介紹了C#自定義簽名章實現(xiàn)方法,涉及C#圖形繪制的相關實現(xiàn)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-08-08
  • C# 6.0 的知識梳理

    C# 6.0 的知識梳理

    目前最新的版本是C# 7.0,VS的最新版本為Visual Studio 2017 RC,兩者都尚未進入正式階段。C# 6.0雖說出了一段時間,但是似乎有許多人對這一塊知識并不了解。本文將對C# 6.0的知識進行梳理,下面跟著小編一起來看下吧
    2016-12-12
  • C#獲取路徑的幾種方式實例分析

    C#獲取路徑的幾種方式實例分析

    這篇文章主要介紹了C#獲取路徑的幾種方式,實例分析了C#常用的路徑操作技巧,需要的朋友可以參考下
    2015-06-06
  • C#預處理指令之#line,#pragma warning 詳細解析

    C#預處理指令之#line,#pragma warning 詳細解析

    #line 指令可能由生成過程中的自動中間步驟使用。例如,如果行從原始的源代碼文件中移除,但是您仍希望編譯器基于文件中的原始行號生成輸出,則可以移除行,然后用 #line 模擬原始行號
    2014-01-01

最新評論

喜德县| 稻城县| 酉阳| 江陵县| 沽源县| 浠水县| 顺义区| 丰原市| 淮北市| 登封市| 儋州市| 泌阳县| 兴仁县| 南康市| 南丹县| 息烽县| 如皋市| 平湖市| 漠河县| 天水市| 中阳县| 微博| 新乐市| 福州市| 阿瓦提县| 城固县| 贺州市| 林西县| 新乡市| 虎林市| 康定县| 塘沽区| 英山县| 福贡县| 扎赉特旗| 公主岭市| 车险| 石台县| 旺苍县| 衢州市| 西宁市|