Off*_*'er 3 .net vb.net enums attributes
我有这个枚举:
<Flags()>
Public Enum FilterEnum As Integer
Green= 0
Blue = 1
Red = 2
Yellow = 4
End Enum
Run Code Online (Sandbox Code Playgroud)
我想给“绿色”和“黄色”某种属性,所以当我得到这样的枚举时:
Dim enumItems = [Enum].GetValues(myEnum)
Run Code Online (Sandbox Code Playgroud)
我只会获得具有该属性的枚举值,如下所示:
Dim enumItems = [Enum].GetValues(myEnum).where(function(o) o.myAttribute)
Run Code Online (Sandbox Code Playgroud)
您可以通过这种方式创建自定义属性:
<AttributeUsage(AttributeTargets.Field)>
Public Class SomeAttribute
Inherits System.Attribute
Public Property SomeValue As String
End Class
Run Code Online (Sandbox Code Playgroud)
然后创建枚举并用您的属性装饰字段:
Public Enum MyEnum
<Some(SomeValue:="Good One")>
Member1 = 1
<Some(SomeValue:="Bad One")>
Member2 = 2
<Some(SomeValue:="Good One")>
Member3 = 3
End Enum
Run Code Online (Sandbox Code Playgroud)
并使用此查询,获取您想要的内容,例如“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()
Run Code Online (Sandbox Code Playgroud)
结果将是: