C#枚舉類型的常用操作總結

来源:http://www.cnblogs.com/pengze0902/archive/2016/10/17/5970357.html
-Advertisement-
Play Games

枚舉類型是定義了一組“符號名稱/值”配對。枚舉類型是強類型的。每個枚舉類型都是從system.Enum派生,又從system.ValueType派生,而system.ValueType又從system.Object派生,所以枚舉類型是指類型。 編譯枚舉類型時,C#編譯器會把每個符號轉換成類型的一個常 ...


   枚舉類型是定義了一組“符號名稱/值”配對。枚舉類型是強類型的。每個枚舉類型都是從system.Enum派生,又從system.ValueType派生,而system.ValueType又從system.Object派生,所以枚舉類型是指類型。

   編譯枚舉類型時,C#編譯器會把每個符號轉換成類型的一個常量欄位。C#編譯器將枚舉類型視為基元類型。

 1.獲取枚舉列表:

        /// <summary>
        /// 獲取枚舉列表
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <returns>枚舉列表</returns>
        public static Dictionary<int, string> GetEnumList(Type enumType)
        {
            var dic = new Dictionary<int, string>();
            try
            {
                var fd = enumType.GetFields();
                for (var index = 1; index < fd.Length; ++index)
                {
                    var info = fd[index];
                    var fieldValue = System.Enum.Parse(enumType, fd[index].Name);
                    var attrs = info.GetCustomAttributes(typeof(EnumTextAttribute), false);
                    foreach (EnumTextAttribute attr in attrs)
                    {
                        var key = (int)fieldValue;
                        if (key == -100) continue;
                        var value = attr.Text;
                        dic.Add(key, value);
                    }
                }
                return dic;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

2.獲取枚舉名稱:

        /// <summary>
        /// 獲取枚舉名稱
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <param name="id">枚舉值</param>
        /// <returns>如果枚舉值存在,返回對應的枚舉名稱,否則,返回空字元</returns>
        public static string GetEnumTextById(Type enumType, int id)
        {
            var ret = string.Empty;
            try
            {
                var dic = GetEnumList(enumType);
                foreach (var item in dic)
                {
                    if (item.Key != id) continue;
                    ret = item.Value;
                    break;
                }
                return ret;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

3.根據枚舉值獲取對應中文描述:

        /// <summary>
        /// 根據枚舉值獲取對應中文描述
        /// </summary>
        /// <param name="enumValue">枚舉值</param>
        /// <returns>枚舉值中文描述</returns>
        public static string GetEnumTextByEnum(object enumValue)
        {
            var ret = string.Empty;
            if ((int)enumValue == -1) return ret;
            try
            {
                var dic = GetEnumList(enumValue.GetType());
                foreach (var item in dic)
                {
                    if (item.Key != (int)enumValue) continue;
                    ret = item.Value;
                    break;
                }
                return ret;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

4.獲取枚舉名稱:

        /// <summary>
        /// 獲取枚舉名稱
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <param name="index">枚舉值的位置編號</param>
        /// <returns>如果枚舉值存在,返回對應的枚舉名稱,否則,返回空字元</returns>
        public static string GetEnumTextByIndex(Type enumType, int index)
        {
            var ret = string.Empty;
            var dic = GetEnumList(enumType);
            if (index < 0 || index > dic.Count)
                return ret;
            var i = 0;
            foreach (var item in dic)
            {
                if (i == index)
                {
                    ret = item.Value;
                    break;
                }
                i++;
            }
 
            return ret;
        }

5.獲取枚舉值:

        /// <summary>
        /// 獲取枚舉值
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <param name="name">枚舉名稱</param>
        /// <returns>如果枚舉名稱存在,返回對應的枚舉值,否則,返回-1</returns>
        public static int GetEnumIdByName(Type enumType, string name)
        {
            var ret = -1;
            if (string.IsNullOrEmpty(name))
                return ret;
            var dic = GetEnumList(enumType);
            foreach (var item in dic)
            {
                if (string.Compare(item.Value, name, StringComparison.Ordinal) != 0) continue;
                ret = item.Key;
                break;
            }
            return ret;
        }

6.獲取名字對應枚舉值:

        /// <summary>
        /// 獲取名字對應枚舉值
        /// </summary>
        /// <typeparam name="T">枚舉類型</typeparam>
        /// <param name="name">枚舉名稱</param>
        /// <returns></returns>
        public static T GetEnumIdByName<T>(string name) where T : new()
        {
            var type = typeof(T);
 
            var enumItem = (T)TypeDescriptor.GetConverter(type).ConvertFrom("-1");
            if (string.IsNullOrEmpty(name))
                return enumItem;
 
            try
            {
                var fd = typeof(T).GetFields();
                for (var index = 1; index < fd.Length; ++index)
                {
                    var info = fd[index];
                    var fieldValue = System.Enum.Parse(type, fd[index].Name);
                    var attrs = info.GetCustomAttributes(typeof(EnumTextAttribute), false);
                    if (attrs.Length != 1) continue;
                    var attr = (EnumTextAttribute)attrs[0];
                    if (!name.Equals(attr.Text)) continue;
                    enumItem = (T)fieldValue;
                    break;
                }
                return enumItem;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

7.獲取枚舉值所在的位置編號:

        /// <summary>
        /// 獲取枚舉值所在的位置編號
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <param name="name">枚舉名稱</param>
        /// <returns>如果枚舉名稱存在,返回對應的枚舉值的位置編號,否則,返回-1</returns>
        public static int GetEnumIndexByName(Type enumType, string name)
        {
            var ret = -1;
 
            if (string.IsNullOrEmpty(name))
                return ret;
 
            var dic = GetEnumList(enumType);
            var i = 0;
            foreach (var item in dic)
            {
                if (string.Compare(item.Value, name, StringComparison.Ordinal) == 0)
                {
                    ret = i;
                    break;
                }
                i++;
            }
 
            return ret;
        }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 要拷貝的文件及其文件夾結構 其中.lab文件不能覆蓋 ...
  • 一、在項目中添加Ckeditor4.5.11 (1) 新建 ASP.NET MVC5項目,解壓縮ckeditor_4.5.11_standard.zip,在VS2015的解決方案資源管理器中將得到的“ckeditor”文件夾複製到當前項目的Scripts文件夾中。 (2) 此時在解決方案資源管理器中 ...
  • 匿名函數一個“內聯”語句或表達式,可在需要委托類型的任何地方使用。可以使用匿名函數來初始化命名委托,或傳遞命名委托(而不是命名委托類型)作為方法參數。 共有兩種匿名函數: Lambda表達式(在這裡只舉例在Lambda表達式在委托中的應用) 匿名方法 Lambda表達式是一種可用於創建委托或表達式目 ...
  • ASP.NET Aries 4.0 主要更新如下:1:增加AR.Global.GetUser() 方法返回當前登陸者的用戶信息。2:重寫AR.Combobox 支持下拉樹。3:調整及擴展Input下拉的配置參數。4:優化及新增AR.Combobox相關的方法。5:重寫層級表頭的配置及演算法。6:擴展下... ...
  • 1、概覽 1.1、介紹 ...
  • 上大學時學校開過一門課程就是數據結構,當時學的似懂非懂,不知道它的重要性,現在工作了,想撿起來,所以重新買了本書,重溫數據結構,我自己會記錄整個學習的過程,有興趣的同學可以一起。 今天剛看到基礎篇,也記錄下來,方便日後查看和再次回顧。 <一>你需要知道的一些名詞定義: 1.數據:數據是對客觀事物的符 ...
  • 為.net core 配一個基於html5的UI框架 傳送門:TchApp項目說明 ...
  • [ASP.NET Core] Getting Started 前言 本篇文章介紹如何快速建立一個ASP.NET Core應用程式,為自己留個紀錄也希望能幫助到有需要的開發人員。 ASP.NET Core官網 環境 建立一個ASP.NET Core應用程式,首先要從官網下載SDK來建置.NET Cor ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...