背景
在我們的日常開發中,我們會經常使用列舉型別。列舉型別(enum type)是具有一組命名常量的獨特的值型別。在以下示例中:
enum color
宣告乙個名為 color 的列舉型別,該型別具有三個成員:red、green 和 blue。
列舉具體是怎麼宣告呢?列舉宣告用於宣告新的列舉型別。列舉宣告以關鍵字 enum 開始,然後定義該列舉型別的名稱、可訪問性、基礎型別和成員。具www.cppcns.com體格式:
修飾詞(new、public、protected、internal、private)enum 列舉型別名:整數型別
有時我們只需要顯示列舉的值或者列舉值對應名稱, 但是在某些場景下,我們可能需要將列舉值顯示為不同的字串。
例: 當前我們有如下列舉level
public enum level
這個列舉有4個可選值b, n, g, vg。 現在我們希望用bad, normal, good, very good作為b, n, g, vg的顯示值。
那我們會怎麼做呢?通常我們最常想到的就是針對level列舉型別編寫乙個擴充套件方法。
public static class levelenumextension}}
以上的**在我們的專案中很常用。但是這裡有2個潛在的問題:
那麼如何改進這部分**,從而消除上述2個問題呢,這時候我們就要引入.net中的文字描述屬性類descriptionattribute。
使用descriptionattribute重構**
其實.net中已經提供了乙個文字程式設計客棧描述屬性類descriptionattribute, 這個屬性類的建構函式可以接收一段文字描述。
下面我們使用descriptionattribute來改造level列舉型別。
public enum level
這樣我們上面提到的第二個問題就解決了,現在level列舉型別的列舉值和顯示值就都封裝在了一起。
那麼第乙個問題該怎麼解決呢?
這裡我們可以針對enum型別新增擴充套件方法,並使用反射讀取當前列舉值所對應的顯示值
public static class enumextension
return (attributes.single() as descriptionattribute).description;
} }由於enum型別是所有列舉型別的基型別,所以所有的列舉型別都可以使用這個擴充套件方法。
總結本篇博文中,我們講解了如果如何.net內建的文字描述屬性類descriptionattribute來生成列舉值對應的文字,它不僅可以減少重複**,還可以讓整個列舉型別的內聚性更高。
本文標題: c#中如何為列舉型別新增描述方法【小技巧】
本文位址:
小技巧 C 中如何為列舉型別新增描述方法
在我們的日常開發中,我們會經常使用列舉型別。有時我們只需要顯示列舉的值或者列舉值對應名稱,但是在某些場景下,我們可能需要將列舉值顯示為不同的字串。例 當前我們有如下列舉level public enum level 這個列舉有4個可選值b,n,g,vg。現在我們希望用bad,normal,good,...
如何為資料庫,表等物件新增描述資訊
如何為資料庫,表等物件新增描述資訊 建立例項資料庫test create database test 為test資料庫新增拓展屬性 use test go exec sys.sp addextendedproperty name n ms descriptiontest value n test o...
C 中列舉型別
列舉型別是一種的值型別,它用於宣告一組命名的常數。1 列舉的宣告 列舉宣告用於宣告新的列舉型別。訪問修辭符 enum 列舉名 基礎型別 基礎型別必須能夠表示該列舉中定義的所有列舉數值。列舉宣告可以顯式地宣告 byte sbyte short ushort int uint long 或 ulong ...