【问题标题】:Vb.net custom attribute to an enumvb.net 自定义属性到枚举
【发布时间】:2015-09-07 10:21:53
【问题描述】:

我有这个枚举:

<Flags()>
    Public Enum FilterEnum As Integer

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

    End Enum

我想给“绿色”和“黄色”一些属性,所以当我得到这样的枚举时:

Dim enumItems = [Enum].GetValues(myEnum)

我将只获得具有该属性的人的 Enum 值,如下所示:

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

【问题讨论】:

  • [Enum].GetValues() 适用于一个类型,所以它应该是[Enum].GetValues(GetType(FilterEnum)) 否则听起来你可能想要.HasFlag

标签: .net vb.net enums attributes


【解决方案1】:

您可以为此创建自定义属性:

<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”s

'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()

结果将是:

【讨论】:

    【解决方案2】:

    也许你可以使用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
    

    然后,检查它们Get Enum from Description attribute

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 2016-12-11
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      相关资源
      最近更新 更多