Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VB.NET中从枚举中获取描述?_.net_Vb.net_String_Enums - Fatal编程技术网

如何在VB.NET中从枚举中获取描述?

如何在VB.NET中从枚举中获取描述?,.net,vb.net,string,enums,.net,Vb.net,String,Enums,我的枚举如下 Public Enum FailureMessages <Description("Failed by bending")> FailedCode1 = 0 <Description("Failed by shear force")> FailedCode2 = 1 End Enum 任何人都可以帮助我,我如何在VB.NET中做到这一点您需要使用反射来检索描述。由于这些是用户添加的,因此可能会缺少一个或多个,如果缺少属性,我希望它返回名称

我的枚举如下

Public Enum FailureMessages
  <Description("Failed by bending")>
  FailedCode1 = 0

  <Description("Failed by shear force")>
  FailedCode2 = 1
End Enum

任何人都可以帮助我,我如何在VB.NET中做到这一点

您需要使用
反射
来检索
描述
。由于这些是用户添加的,因此可能会缺少一个或多个,如果缺少
属性,我希望它返回
名称

导入系统反射
导入System.ComponentModel
公共共享函数GetEnumDescription(e作为[Enum])作为字符串
Dim t As Type=e.GetType()
尺寸属性=C类型(t。
GetField([Enum].GetName(t,e))。
GetCustomAttribute(GetType(DescriptionAttribute)),
描述属性)
如果attr不是空的,那么
返回属性描述
其他的
返回e.ToString
如果结束
端函数
用法:

Dim var As FailureMessages = FailureMessages.FailedCode1
Dim txt As String = GetDescription(var)
Dim descr = Utils.GetDescriptions(Of FailureMessages)()
ComboBox1.Items.AddRange(descr)
您可以创建一个版本来获取
枚举的所有描述:

Friend Shared Function GetEnumDescriptions(Of EType)() As String()
    Dim n As Integer = 0

    ' get values to poll
    Dim enumValues As Array = [Enum].GetValues(GetType(EType))
    ' storage for the result
    Dim Descr(enumValues.Length - 1) As String
    ' get description or text for each value
    For Each value As [Enum] In enumValues
        Descr(n) = GetEnumDescription(value)
        n += 1
    Next

    Return Descr
End Function
用法:

Dim var As FailureMessages = FailureMessages.FailedCode1
Dim txt As String = GetDescription(var)
Dim descr = Utils.GetDescriptions(Of FailureMessages)()
ComboBox1.Items.AddRange(descr)
T的
使它更易于使用。传递类型将是:

Shared Function GetEnumDescriptions(e As Type) As String()
' usage:
Dim items = Utils.GetEnumDescriptions(GetType(FailureMessages))
请注意,使用名称填充组合意味着您需要解析结果以获得值。相反,我发现将所有名称和值放入一个
列表(名称-值对)
以将它们放在一起会更好/更容易


您可以将控件绑定到列表,并使用
DisplayMember
向用户显示名称,而代码使用
ValueMember
返回实际键入的值。

不是重复的-这是针对VB.NET的,而不是针对C++的!可以通过提及您需要导入
System.Reflection
System.ComponentModel
来改进。最初,我将枚举变量命名为描述性变量,但为了以后的报告目的,我需要一个适当的描述。你的功能有帮助!干杯