給列舉值增加擴充套件資料

2021-07-26 23:38:17 字數 1177 閱讀 7400

一般的每個列舉值對應著乙個值, 而有時乙個列舉值又具有其他的對應值或者需要有額外的擴充套件資料,這時我們怎麼辦?一種簡單的方案是,可以定義乙個以列舉值為key的字典,然後在value中填入相應的值。當這個對應的值是固化的,那是不是一定要字典儲存呢?是否可以在定義列舉的時候就進行定義呢?答案是有的。

.net中有一種特別的類attribute,繼承自attribute的類可以在列舉上直接新增相應的資料,比如常見的description就是繼承自attribute,我們在定義列舉的時候,如果需要列舉對應相應的文字描述,可以這樣定義。

public enum switchenum

那我們要如何得到description呢?可以通過反射。為了方便呼叫,我們寫了乙個針對列舉的擴充套件方法。

public static class enumextension

}

有了獲取描述的擴充套件方法後,當我們拿到列舉值時,比如switchenujm.open.fetchdescription()就可以得到描述的值【開啟】。

基於該原理,那麼如果我們自己 定義乙個繼承自attribute的類,然後寫乙個對應的擴充套件方法,那是不是就可以了?是的。**如下

/// /// 列舉擴充套件資料特性

///

public class enumextensiondataattribute : attribute

public enumextensiondataattribute()

public enumextensiondataattribute(object extensiondata)

}

相應的擴充套件方法為

public static class enumextension

#endregion

}

列舉值增加擴充套件資料

public enum switchenum

獲取擴充套件資料的結果如下圖

C 給列舉型別增加乙個備註特性

備註特性 public class remarkattribute attribute public remarkattribute string remark 列舉擴充套件類 public static class enumextension object attributes fi.getcus...

通過反射,如何將數值型列舉值賦值給列舉型別的屬性

處理可空列舉型別 原理它是值型別,原始寫法是nullable,泛型可以有多個型別引數,但資料庫的乙個欄位只會有乙個型別,所以判斷第乙個型別引數是否是列舉 if prop.propertytype.isvaluetype prop.propertytype.isgenerictype prop.pro...

神經網路擴充套件 增加訓練資料

獲取更多的訓練樣本其實是很好的想法。不幸的是,這個 法代價很 在實踐中常常是很 難達到的。不過,還有 種 法能夠獲得類似的效果,那就是 為擴充套件訓練資料。假設我們使 個5的mnist訓練影象,將其進 旋轉,如說15 這還是會被設別為同樣的數字的。但是在畫素層級這和任何 幅在mnist訓練資料中的圖...