欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中FlagsAttribute屬性在enum中的應(yīng)用詳解

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

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

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

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

所謂位域 是單個存儲單元內(nèi)相鄰二進(jìn)制位的集合。

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

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

因?yàn)閷τ谡麛?shù)來說,| 操作就是將其轉(zhuǎn)化為二進(jìn)制再進(jìn)行或運(yùn)算。Flags.Flag2 | Flags.Flag3做的工作實(shí)際上是 0001 | 0010 = 0011 = 3再轉(zhuǎn)換成(MyFlags)3就是Flag4了

如果枚舉聲明如下:

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

則上述結(jié)果為Flag2,Flag3,這樣做的意義在于我們可以實(shí)現(xiàn)“或”的關(guān)系。

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

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都會成立,這就是這種枚舉的意義吧。另外我們應(yīng)當(dāng)注意默認(rèn)初始化的myFlag的值為0,與其作&運(yùn)算不會有任何結(jié)果。

補(bǔ)充知識: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;
  }
}

三、利用反射獲取特性

這里我們寫一個枚舉類的擴(kuò)展方法

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中的應(yīng)用詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

    這篇文章介紹了C#集合之可觀察集合的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#/VB.NET 實(shí)現(xiàn)在PDF表格中添加條形碼

    C#/VB.NET 實(shí)現(xiàn)在PDF表格中添加條形碼

    條碼的應(yīng)用已深入生活和工作的方方面面。在處理?xiàng)l碼時,常需要和各種文檔格式相結(jié)合。本文,以操作PDF文件為例,介紹如何在編輯表格時,向單元格中插入條形碼,需要的可以參考一下
    2022-06-06
  • C#根據(jù)年月日計(jì)算星期幾的函數(shù)小例子

    C#根據(jù)年月日計(jì)算星期幾的函數(shù)小例子

    這篇文章介紹了C#根據(jù)年月日計(jì)算星期幾的函數(shù)小例子,有需要的朋友可以參考一下
    2013-07-07
  • C#通過KD樹進(jìn)行距離最近點(diǎn)的查找

    C#通過KD樹進(jìn)行距離最近點(diǎn)的查找

    這篇文章主要為大家詳細(xì)介紹了C#通過KD樹進(jìn)行距離最近點(diǎn)的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Unity的IPostprocessBuild實(shí)用案例深入解析

    Unity的IPostprocessBuild實(shí)用案例深入解析

    這篇文章主要為大家介紹了Unity的IPostprocessBuild實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C#實(shí)現(xiàn)時間戳與標(biāo)準(zhǔn)時間的互轉(zhuǎn)

    C#實(shí)現(xiàn)時間戳與標(biāo)準(zhǔn)時間的互轉(zhuǎn)

    本文主要介紹了C#中時間戳與標(biāo)準(zhǔn)時間互轉(zhuǎn)的方法,其中需要注意的是基準(zhǔn)時間的問題。文中的示例代碼具有一定的學(xué)習(xí)價值,快來跟隨小編一起了解一下吧
    2021-12-12
  • C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量二

    C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量二

    這篇文章繼續(xù)介紹了C#數(shù)據(jù)類型和變量,是對上一篇文章的補(bǔ)充,希望對大家的學(xué)習(xí)有所幫助。
    2015-10-10
  • C#編程獲取IP地址的方法示例

    C#編程獲取IP地址的方法示例

    這篇文章主要介紹了C#編程獲取IP地址的方法,結(jié)合實(shí)例形式分析了C#獲取客戶端IP地址的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-01-01
  • unity實(shí)現(xiàn)錄音并保存本地

    unity實(shí)現(xiàn)錄音并保存本地

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)錄音并保存本地,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C# 使用AspriseOCR.dll實(shí)現(xiàn)驗(yàn)證碼識別

    C# 使用AspriseOCR.dll實(shí)現(xiàn)驗(yàn)證碼識別

    這篇文章主要介紹了C# 使用AspriseOCR.dll實(shí)現(xiàn)驗(yàn)證碼識別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評論