簡體   English   中英

Vb.net枚舉的自定義屬性

[英]Vb.net custom attribute to an enum

我有這個枚舉:

<Flags()>
    Public Enum FilterEnum As Integer

    Green= 0
    Blue = 1
    Red = 2
    Yellow = 4

    End Enum

我想給“ Green”和“ Yellow”一些屬性,所以當我得到這樣的枚舉時:

Dim enumItems = [Enum].GetValues(myEnum)

我將僅獲得具有該屬性的人的Enum值,如下所示:

Dim enumItems = [Enum].GetValues(myEnum).where(function(o) o.myAttribute)

您可以通過以下方式創建自定義屬性:

<AttributeUsage(AttributeTargets.Field)>
Public Class SomeAttribute
    Inherits System.Attribute
    Public Property SomeValue As String
End Class

然后創建您的枚舉並用屬性裝飾字段:

Public Enum MyEnum
    <Some(SomeValue:="Good One")>
    Member1 = 1
    <Some(SomeValue:="Bad One")>
    Member2 = 2
    <Some(SomeValue:="Good One")>
    Member3 = 3
End Enum

並使用此查詢,獲取所需的內容,例如“ Good One”

'Indented to be more readable step by step
Dim result As List(Of MyEnum) = _
    GetType(MyEnum).GetFields() _
                   .Where(Function(field) _
                          field.GetCustomAttributes(True) _
                               .Cast(Of SomeAttribute) _
                               .Any(Function(attribute) attribute.SomeValue = "Good One")) _
                   .Select(Function(filtered) _
                           CType(filtered.GetValue(Nothing), MyEnum)) _
                   .ToList()

結果將是:

在此處輸入圖片說明

也許您可以使用System.ComponentModel.Description

<Flags()>
Public Enum FilterEnum As Integer
    <System.ComponentModel.Description("value_1")>_
    Green= 0
    <System.ComponentModel.Description("value_2")>_
    Blue = 1
    <System.ComponentModel.Description("value_3")>_
    Red = 2
    <System.ComponentModel.Description("value_4")>_
    Yellow = 4
End Enum

然后,檢查它們,以便從Description屬性獲取Enum

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM