小技巧 C 中如何為列舉型別新增描述方法

2021-09-10 22:49:48 字數 1271 閱讀 9980

在我們的日常開發中,我們會經常使用列舉型別。有時我們只需要顯示列舉的值或者列舉值對應名稱, 但是在某些場景下,我們可能需要將列舉值顯示為不同的字串。

例: 當前我們有如下列舉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 ...