我想为每个枚举值重写 toString 方法。例如,我知道在 Java 中可以按如下方式完成:
public enum Language_Culture_Names{
English {
@Override
public String toString() {
return "en-GB";
}
},
Spanish {
@Override
public String toString() {
return "es-ES";
}
},
Catalan {
@Override
public String toString() {
return "ca-ES";
}
}
}
System.out.println(Language_Culture_Names.English); -> returns en-GB
System.out.println(Language_Culture_Names.Spanish); -> returns es-ES
System.out.println(Language_Culture_Names.Catalan); -> returns ca-ES
那么如何在 VB.NET 中执行此操作?
最佳答案
理想情况下,您应该使用为自己定制的Class
,因为Enums
是数字常量而不是字符串常量。
但是,如果您必须使用 Enum
并正在寻找通用解决方案,我将这样做:
首先,使用以下代码向您的项目添加一个模块
:
Imports System.ComponentModel
Imports System.Runtime.CompilerServices
Module Module1
<Extension()> _
Public Function ToString2(ByVal EnumConstant As [Enum]) As String
Dim fi As Reflection.FieldInfo = EnumConstant.GetType().GetField(EnumConstant.ToString())
Dim aattr() As DescriptionAttribute = DirectCast(fi.GetCustomAttributes(GetType(DescriptionAttribute), False), DescriptionAttribute())
If aattr.Length > 0 Then
Return aattr(0).Description
Else
Return EnumConstant.ToString()
End If
End Function
End Module
我们将函数命名为 ToString2
因为 Enum.ToString
已经存在,并且无法被覆盖。您可以将其命名为其他任何名称。
现在,在声明 Enum
的类中,使用 Description
属性装饰 Enum 成员:
Imports System.ComponentModel '<-- be sure to include this Namespace
Public Enum Language_Culture_Names
<Description("en-GB")> English = 1
<Description("es-ES")> Spanish = 2
<Description("ca-ES")> Catalan = 3
End Enum
最后转储 Enum.ToString
方法并使用我们新的 Enum.ToString2
方法。
例如
TextBox1.Text = Language_Culture_Names.English.ToString2()
HTH。
关于vb.net:覆盖枚举的 toString 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35600446/