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

詳解C# 枚舉高級用法之Description

 更新時間:2021年08月04日 10:53:07   作者:黃小月的爹地  
這篇文章主要介紹了C# 枚舉高級用法之Description,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

基礎(chǔ)枚舉

namespace TestEnum
{
    //聲明
    public enum Name
    {
    //默認(rèn)值 boob = 0 ,依次往下排,可自定義 jackMa = 3,jackCHan那就= 4
        boob,
        JackMa,
        JackChan,
        //
        Lisa,
        Poro
    }
}

聲明枚舉,調(diào)用。
幾個常用的轉(zhuǎn)換不做介紹,一嗦一大堆。

  • enum轉(zhuǎn)string
  • enum 轉(zhuǎn)int
  • string轉(zhuǎn)enum
  • 整型轉(zhuǎn)enum

高級點用法,反射元數(shù)據(jù)

    public enum Name
    {
        [Description("鮑勃")]
        boob,
        [Description("馬宇")]
        JackMa,
        [Description("陳龍")]
        JackChan,
        [Description("麗莎")]
        Lisa,
        [Description("保羅")]
        Poro
    }

加了Description,就可以通過反射來訪問這些數(shù)據(jù)

如何訪問?

using System;
using System.ComponentModel;
namespace TestEnum
{
    //基礎(chǔ)枚舉
    public enum Name
    {
        [Description("鮑勃")]
        boob,
        [Description("馬宇")]
        JackMa,
        [Description("陳龍")]
        JackChan,
        [Description("麗莎")]
        Lisa,
        [Description("保羅")]
        Poro
    }
    //主要這個GetDescription()方法,看不懂沒關(guān)系,如何調(diào)用
    static class EnumExtensions
    {
        public static string GetDescription(this Enum val)
        {
            var field = val.GetType().GetField(val.ToString());
            var customAttribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));
            return customAttribute == null ? val.ToString() : ((DescriptionAttribute)customAttribute).Description;
        }
    }
}

調(diào)用

string str =  Name.boob.GetDescription();
//需要調(diào)用的地方調(diào)用

一個特性不夠,能再加一個嗎?
可以
加一個繼承自Attribute 的類

    public class DataTest : Attribute
    {
        public string Data { get; set; }
        public DataTest(string data)
        {
            Data = data;
        }
        public DataTest(){}
    }

加完了自定義特性后你就會發(fā)現(xiàn)可以加了。。

   [Description("鮑勃")]
        [DataTest("中文3級")]
        boob,
        [Description("馬宇")]
        [DataTest("中文2級")]
        JackMa,
        [Description("陳龍")]
        [DataTest("中文1級")]
        JackChan,
        [Description("麗莎")]
        [DataTest("中文2級")]
        Lisa,
        [Description("保羅")]
        [DataTest("中文2級")]
        Poro

就變成了這樣
訪問也得加一個

        public static string GetData(this Enum val)
        {
            var field = val.GetType().GetField(val.ToString());
            var customAttribute = Attribute.GetCustomAttribute(field, typeof(DataTest));
            return customAttribute == null ? val.ToString() : ((DataTest)customAttribute).Data;
        }

調(diào)用

 string str = Name.boob.GetDescription();
 string DStr = Name.boob.GetData();

以上就是enum 加+自定義特性
不夠可以隨時自己加。
可以測試玩玩,據(jù)說反射浪費資源。

完整代碼

using System;
using System.ComponentModel;
namespace TestEnum
{
    //基礎(chǔ)枚舉
    public enum Name
    {
        [Description("鮑勃")]
        [DataTest("中文3級")]
        boob,
        [Description("馬宇")]
        [DataTest("中文2級")]
        JackMa,
        [Description("陳龍")]
        [DataTest("中文1級")]
        JackChan,
        [Description("麗莎")]
        [DataTest("中文2級")]
        Lisa,
        [Description("保羅")]
        [DataTest("中文2級")]
        Poro
    }
    public class DataTest : Attribute
    {
        public string Data { get; set; }
        public DataTest(string data)
        {
            Data = data;
        }
        public DataTest(){}
    }

    static class EnumExtensions
    {
        public static string GetDescription(this Enum val)
        {
            var field = val.GetType().GetField(val.ToString());
            var customAttribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));
            return customAttribute == null ? val.ToString() : ((DescriptionAttribute)customAttribute).Description;
        }
        public static string GetData(this Enum val)
        {
            var field = val.GetType().GetField(val.ToString());
            var customAttribute = Attribute.GetCustomAttribute(field, typeof(DataTest));
            return customAttribute == null ? val.ToString() : ((DataTest)customAttribute).Data;
        }
    }
}

PS:可以聲明obect類型Attribute.子類。 那。。。。??砂l(fā)揮空間就大了。

到此這篇關(guān)于詳解C# 枚舉高級用法之Description的文章就介紹到這了,更多相關(guān)C# 枚舉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c# 免費組件html轉(zhuǎn)pdf的實現(xiàn)過程

    c# 免費組件html轉(zhuǎn)pdf的實現(xiàn)過程

    這篇文章主要介紹了c# 免費組件html轉(zhuǎn)pdf的實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • C#多線程系列之線程的創(chuàng)建和生命周期

    C#多線程系列之線程的創(chuàng)建和生命周期

    這篇文章介紹了C#多線程系列之線程的創(chuàng)建和生命周期,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • c# 調(diào)用.bat文件的實現(xiàn)代碼

    c# 調(diào)用.bat文件的實現(xiàn)代碼

    c# 調(diào)用.bat文件主要利用了using System.Diagnostics;命名空間,大家可以參考下。
    2009-06-06
  • C#使用Datatable導(dǎo)出Excel

    C#使用Datatable導(dǎo)出Excel

    這篇文章主要為大家詳細(xì)介紹了C#使用Datatable導(dǎo)出Excel的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 英語單詞state與status的區(qū)別

    英語單詞state與status的區(qū)別

    state傾向于condition,是一種延續(xù)性的狀態(tài)。status常用于描述一個過程中的某階段(phase),類似于C語言中枚舉型變量某一個固定的值,這個值屬于一個已知的集合。這篇文章主要介紹了英語單詞state與status的區(qū)別,需要的朋友可以參考下
    2016-11-11
  • C#使用系統(tǒng)方法發(fā)送異步郵件完整實例

    C#使用系統(tǒng)方法發(fā)送異步郵件完整實例

    這篇文章主要介紹了C#使用系統(tǒng)方法發(fā)送異步郵件實現(xiàn)方法,結(jié)合完整實例形式分析了C#異步調(diào)用與郵件發(fā)送的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • C#遍歷指定目錄下所有文件的方法

    C#遍歷指定目錄下所有文件的方法

    這篇文章主要介紹了C#遍歷指定目錄下所有文件的方法,實例分析了C#中GetFiles()方法遍歷文件的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#創(chuàng)建二叉搜索樹的方法

    C#創(chuàng)建二叉搜索樹的方法

    這篇文章主要介紹了C#創(chuàng)建二叉搜索樹的方法,涉及C#二叉搜索樹的實現(xiàn)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Unity?UGUI的PhysicsRaycaster物理射線檢測組件介紹使用

    Unity?UGUI的PhysicsRaycaster物理射線檢測組件介紹使用

    這篇文章主要介紹了Unity?UGUI的PhysicsRaycaster物理射線檢測組件的介紹及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • .NET中保證線程安全的高級方法Interlocked類使用介紹

    .NET中保證線程安全的高級方法Interlocked類使用介紹

    這篇文章主要介紹了.NET中保證線程安全的高級方法Interlocked類使用介紹,Interlocked類可以為為多個線程共享的變量提供原子操作,需要的朋友可以參考下
    2014-07-07

最新評論

天镇县| 浦城县| 宣武区| 嘉义县| 清水河县| 沙洋县| 班戈县| 屏边| 汶上县| 重庆市| 乌苏市| 左权县| 恭城| 泸西县| 龙川县| 上杭县| 栾城县| 吴旗县| 简阳市| 瑞昌市| 涿州市| 中方县| 凤城市| 华宁县| 浦城县| 皋兰县| 宾阳县| 安达市| 望谟县| 赤峰市| 赤壁市| 开原市| 吉安市| 博乐市| 公主岭市| 盐池县| 福安市| 茶陵县| 温泉县| 南平市| 宁阳县|