在我們的日常開發中,我們會經常使用列舉型別。有時我們只需要顯示列舉的值或者列舉值對應名稱, 但是在某些場景下,我們可能需要將列舉值顯示為不同的字串。
例: 當前我們有如下列舉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
。
其實.net中已經提供了乙個文字描述屬性類descriptionattribute
, 這個屬性類的建構函式可以接收一段文字描述。
下面我們使用descriptionattribute
來改造level
列舉型別。
public enum level
這樣我們上面提到的第二個問題就解決了,現在level
列舉型別的列舉值和顯示值就都封裝在了一起。
那麼第乙個問題該怎麼解決呢?
這裡我們可以針對enum
型別新增擴充套件方法,並使用反射讀取當前列舉值所對應的顯示值
public static class enumextension
return (attributes.single() as descriptionattribute).description;}}
由於enum
型別是所有列舉型別的基型別,所以所有的列舉型別都可以使用這個擴充套件方法。
本篇博文中,我們講解了如果如何.net內建的文字描述屬性類descriptionattribute
來生成列舉值對應的文字,它不僅可以減少重複**,還可以讓整個列舉型別的內聚性更高。
C 中如何為列舉型別新增描述方法 小技巧
背景 在我們的日常開發中,我們會經常使用列舉型別。列舉型別 enum type 是具有一組命名常量的獨特的值型別。在以下示例中 enum color 宣告乙個名為 color 的列舉型別,該型別具有三個成員 red green 和 blue。列舉具體是怎麼宣告呢?列舉宣告用於宣告新的列舉型別。列舉宣...
C 的列舉小技巧
列舉是什麼呢?列舉是乙個值型別,包含一組命名的常量,如以下的 public enum color 這裡是最簡單的定義列舉的方式,沒有設定任何的東西,所以預設情況下,enum的型別是int型的,並且是從0開始往下遞增地,但是我們可以修改以上說的東西,比如以下 public enum color sho...
C 中列舉型別
列舉型別是一種的值型別,它用於宣告一組命名的常數。1 列舉的宣告 列舉宣告用於宣告新的列舉型別。訪問修辭符 enum 列舉名 基礎型別 基礎型別必須能夠表示該列舉中定義的所有列舉數值。列舉宣告可以顯式地宣告 byte sbyte short ushort int uint long 或 ulong ...