vb.net:覆盖枚举的 toString 方法

标签 vb.net enums tostring enumeration

我想为每个枚举值重写 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/

相关文章:

javascript - 如何在没有 toString() 的情况下获取函数值?

vb.net - 检测 SQL 注入(inject)

.NET MVC - 如何从另一个 Controller 获取 JsonResult?

c - 事实与枚举

c++ - 带有名称的枚举标志

java - toString方法中可以使用void吗

c# - 如何在 VS 2008 或使用 Coderush Express 中自动生成方法 stub ?

vb.net - 在没有实际 Excel 的情况下使用 Microsoft.Office.Interop.Excel?

php - 在 MYSQLi 中插入 'ENUM'

java - 我自己的图形类中使用 HashMap 的 NPE