none
Enum über seinen Namen ansprechen

    Frage

  • Hallo in die Runde,

    ich möchte gerne ein Enum über seinen Namen ansprechen. Leider habe ich noch keine Lösung zu diesem Problem gefunden. Hier ein vereinfachtes Beispiel.

    Enum Name1

            Jumbo

            ExtraLarge

     End Enum

     

      Enum Name2

            Medium

            Small

      End Enum

     

        Private Sub ZeigeEnumInhalt(ByVal EnumName As String)

     

            Dim i As Integer = 0

            Dim OptionenNamen() As String = {}

     

            OptionenNamen = System.Enum.GetNames(GetType(=========> EnumName  <============))

     

            For i = 0 To OptionenNamen.Length - 1

                Debug.WriteLine(OptionenNamen(i).ToString)

            Next

     

        End Sub

     

     

    Kann mir  jemand den Weg zeigen?

     

     

    Mit freundlichen Grüßen

     

    Dipl. Ing.  Joachim Schmäck


    Mit freundlichen Grüßen Dipl. Ing. Joachim Schmäck

    Mittwoch, 13. Juli 2016 17:35

Alle Antworten

  • Hallo Joachim,

    über Type.GetType kannst du mit Hilfe des vollständigen Namens des Enums den Typ bekommen. Der Vollständige Name schließt den Namespace und ggf. noch den Assembly-Namen mit ein:

    OptionenNamen = System.Enum.GetNames(System.Type.GetType(EnumName, True))
    ZeigeEnumInhalt("ConsoleApplication1.Name2")



    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Mittwoch, 13. Juli 2016 18:08
  • Hallo Joachim,

    Zeichenketten als Parameter sollte man nur verwenden, wenn es unvermeidlich ist. Hier würde man eher den Typen übergeben. Das vermeidet unnötige Aktionen wie das Nachschlagen und Fehler, da in .NET Typen (wie Enums) in einem Namespace eingeordnet werden. Über den GetType Operator kann man jederzeit den Typen ermitteln.

        ' Bevorzugte Variante über einen System.Type
        Private Sub ZeigeEnumInhalt(enumType As System.Type)
            ' mit Option Infer On
            Dim enumNames = System.Enum.GetNames(enumType)
            ' sonst
            'Dim enumNames() As String = System.Enum.GetNames(enumType)
            For Each enumName In enumNames
                Console.WriteLine(enumName)
            Next
        End Sub
    
        ' Falls unbedingt eine Zeichenkette sein muss
        Private Sub ZeigeEnumInhalt(enumName As String)
            ZeigeEnumInhalt(Type.GetType(enumName))
        End Sub
    
        Private Sub executeButton_Click(sender As Object, e As EventArgs) Handles executeButton.Click
            ZeigeEnumInhalt(GetType(Name1))
            ZeigeEnumInhalt(GetType(Name2))
        End Sub

    Gruß Elmar

    Donnerstag, 14. Juli 2016 07:03
  • Hallo Tom, hallo Elmar,

    danke für eure Hilfe. Ich denke jetzt komme ich weiter!!


    Mit freundlichen Grüßen Dipl. Ing. Joachim Schmäck

    Donnerstag, 14. Juli 2016 15:13