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

2022-10-06 06:15:11 字數 1336 閱讀 7841

背景

在我們的日常開發中,我們會經常使用列舉型別。列舉型別(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 ...