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

C#中FlagsAttribute屬性在enum中的應用詳解

 更新時間:2020年10月21日 09:31:33   作者:@朱較瘦  
這篇文章主要介紹了C#中FlagsAttribute屬性在enum中的應用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

Net C#中枚舉的聲明格式如下所示:

[attributes] [modifiers] enum identifier [:base-type] {enumerator-list} [;]

FlagsAttribute屬性就是枚舉類型的一項可選屬性。它的主要作用是可以將枚舉作為位域處理(P.S. C#不支持位域)。

所謂位域 是單個存儲單元內相鄰二進制位的集合。

通過為枚舉添加這個屬性,可以改變枚舉的一些行為來滿足我們的需要。

enum MyFlags { Flag1, Flag2, Flag3, Flag4}; 
MyFlags myFlag = MyFlags.Flag2 | MyFlags.Flag3; 
Console.WriteLine(myFlag);//Flag4

因為對于整數來說,| 操作就是將其轉化為二進制再進行或運算。Flags.Flag2 | Flags.Flag3做的工作實際上是 0001 | 0010 = 0011 = 3再轉換成(MyFlags)3就是Flag4了

如果枚舉聲明如下:

[FlagsAttribute]
enum MyFlags{
   Flag1 = 0,  //000
   Flag2 = 1,  //001
   Flag3 = 2,  //010
   Flag4 = 4   //100
};

則上述結果為Flag2,Flag3,這樣做的意義在于我們可以實現“或”的關系。

就上例而言,myFlag可以更直觀的表現為011,因此當我們想要檢驗它滿足哪個枚舉值時我們可以使用&操作:

if((myFlag & MyFlags.Flag2) == MyFlags.Flag2)
{
   Console.WriteLine("true");
}
if((myFlag & MyFlags.Flag3) == MyFlags.Flag3)
 
{
   Console.WriteLine("true");
}

011&001 = 001,011&010 = 010,因此這兩個if都會成立,這就是這種枚舉的意義吧。另外我們應當注意默認初始化的myFlag的值為0,與其作&運算不會有任何結果。

補充知識:C# 使用特性(Attribute)來漢化枚舉類

一、新建枚舉

public enum CRUD
{
  Create,  
  Retrieve,
  Update,
  Delete
}

二、新建特性類

public sealed class ChineseAttribute : Attribute
{
  public string Chinese { get; set; }
  public ChineseAttribute(string _chinese = "未漢化")
  {
    Chinese = _chinese;
  }
}

三、利用反射獲取特性

這里我們寫一個枚舉類的擴展方法

public static string GetChinese(this Enum value)
{
  Type objType = value.GetType();
  Type attrType = typeof(ChineseAttribute);

  FieldInfo field = objType.GetField(value.ToString());

  //利用反射找是否有【Chinese】特性
  if (field.IsDefined(attrType))
  {
    var chinese = field.GetCustomAttribute<ChineseAttribute>();
    return chinese.Chinese;
  }
  //沒有定義Chinese特性,直接返回具體指
  return value.ToString();
}

四、給枚舉類添加特性

public enum CRUD
{
  [Chinese("創(chuàng)建")]
  Create,

  [Chinese("讀取")]
  Retrieve,

  [Chinese]
  Update,
  Delete
}

五、測試

static void Main(string[] args)
{
  List<MyEnum.CRUD> values = new List<MyEnum.CRUD> 
  { 
    MyEnum.CRUD.Create, 
    MyEnum.CRUD.Delete, 
    MyEnum.CRUD.Retrieve, 
    MyEnum.CRUD.Update 
  };

  foreach (var item in values)
  {
    Console.WriteLine(item.GetChinese());
  }
  Console.Read();
}

效果如下

以上這篇C#中FlagsAttribute屬性在enum中的應用詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C#控制臺實現簡單飛行棋游戲

    C#控制臺實現簡單飛行棋游戲

    這篇文章主要為大家詳細介紹了C#控制臺實現簡單飛行棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#串口編程System.IO.Ports.SerialPort類

    C#串口編程System.IO.Ports.SerialPort類

    這篇文章介紹了C#串口編程System.IO.Ports.SerialPort類,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • WinForm中DataGridView添加,刪除,修改操作具體方法

    WinForm中DataGridView添加,刪除,修改操作具體方法

    這篇文章介紹了WinForm中DataGridView添加,刪除,修改操作具體方法,有需要的朋友可以參考一下
    2013-10-10
  • C#集合之可觀察集合的用法

    C#集合之可觀察集合的用法

    這篇文章介紹了C#集合之可觀察集合的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • c# Newtonsoft.Json 常用方法總結

    c# Newtonsoft.Json 常用方法總結

    這篇文章主要介紹了c# Newtonsoft.Json 常用方法的相關資料,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#11新特性使用案例詳解

    C#11新特性使用案例詳解

    這篇文章主要為大家介紹了C#11新特性的使用案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • ASP.Net動態(tài)讀取Excel文件最簡方法

    ASP.Net動態(tài)讀取Excel文件最簡方法

    本篇文章給大家分享了ASP.Net動態(tài)讀取Excel文件最簡方法,對此有需要的讀者們參考學習下。
    2018-05-05
  • C#編譯器對局部變量的優(yōu)化指南

    C#編譯器對局部變量的優(yōu)化指南

    這篇文章主要給大家介紹了關于C#編譯器對局部變量的優(yōu)化指南,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • c#中自定義Base16編碼解碼的方法示例

    c#中自定義Base16編碼解碼的方法示例

    這篇文章主要給大家介紹了關于c#中自定義Base16編碼解碼的相關資料,并且給大家分享了C#中16進制轉換為Base64字符串的方法示例,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-11-11
  • 關于C#?調用Dll?傳遞字符串指針參數的問題

    關于C#?調用Dll?傳遞字符串指針參數的問題

    這篇文章主要介紹了C#?調用Dll傳遞字符串指針參數,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論

大厂| 邵阳市| 镇远县| 凯里市| 阿巴嘎旗| 耿马| 左贡县| 云浮市| 富裕县| 深水埗区| 资源县| 远安县| 津市市| 高唐县| 景宁| 杂多县| 新源县| 县级市| 绍兴市| 彭州市| 巩义市| 和政县| 稷山县| 兰西县| 小金县| 新营市| 翁源县| 乌鲁木齐市| 三穗县| 商洛市| 天柱县| 三门峡市| 云阳县| 商南县| 临泽县| 佛教| 曲水县| 武义县| 古浪县| 双鸭山市| 萨嘎县|