| 

.NET C# Java Javascript Exception

5
Ich habe in einem älteren VB6-Programm eine Enumeration des folgenden Typs:

Public Enum Waehrungen
[€] = 1
[$] = 2
...
Euro = [€]
Dollar = [$]
End Enum


In VB.NET kann ich weder Sonderzeichen noch numerische Zeichenfolgen als Elemente einer Enumeration angegeben (auch nicht mit Klammern maskiert). Auch Dubletten, Leerzeichen und Enumerationskonstanten kann ich nicht definieren, oder habe ich da was übersehen? Wie setzt man solche Enumerationen am einfachsten auf .NET um?
News:
03.03.2013
VbFan 460 1 8
VbFan 460 1 8
3 Antworten
2
Hallo,

hier musst Du ein wenig tricksen und über eigene Attribute gehen.
Hier das Beispiel in der VB.NET Variante:

Imports System.Runtime.CompilerServices
Imports System.Reflection

Module Module1

Sub Main()

Dim waehrung As Test = Test.Euro

Dim result As String = waehrung.GetStringValue()

End Sub

End Module


Enum Test

<StringValue("€")>
Euro

<StringValue("$")>
Dollar

End Enum

Module EnumExtensions

<Extension()>
Public Function GetStringValue(ByVal self As [Enum]) As String

Dim type As Type = self.GetType()

Dim fieldInfo As FieldInfo = type.GetField(self.ToString())

Dim attributes As StringValueAttribute() = fieldInfo _
.GetCustomAttributes(GetType(StringValueAttribute), False)

If (attributes IsNot Nothing AndAlso attributes.Length > 0) Then
Return attributes(0).Value

End If

Return Nothing
End Function

End Module

Class StringValueAttribute
Inherits Attribute

Private ReadOnly _value As String

Public Sub New(ByVal value As String)
_value = value

End Sub

Public ReadOnly Property Value() As String
Get
Return _value
End Get
End Property

End Class
04.03.2013
lbm1305 849 1 8
+1, weil Du gleich eine passende ExtensionMethod dazugepackt hast. Wenns denn unbedingt ein Enum sein muss, dann würde ich auch diesen Weg gehen.
ffordermaier 04.03.2013
2
In VB5/6 waren die Enumerationen Aufzählungstypen mit diversen Sonderfunktionen, die man in VB.NET tatsächlich vergeblich sucht. Es werden keine eckigen Klammern und Sonderzeichen unterstützt. Details zur alten Variante findest Du hier.

In neuen Anwendungen unter .NET musst Du dementsprechend die Enumerationsdastentypen und auch den darauf bezogenen Quelltext anpassen, also in der folgenden Form und ohne etwaige Dubletten:

Enum Waehrungen
Euro [= 1]
Dollar [=2]
...
End Enum


Eine Zeichenkettenzuweisung wie Ibm1305 es gezeigt hat ist zwar möglich, lohnt den Aufwand aber eigentlich nicht, zumal auch hier der Elementzugriff auf Quelltextebene über die namentlichen Enumerationselemente erfolgt.
04.03.2013
MrDeveloper 383 7
0
Wenn ich das richtig verstehe, werden im Beispiel von Ibm1305 die Dupletten als Attribbut angehängt. Das gleicht die Fun ktionalität an, ist aber mit viel Aufwand verbunden. I ch habe seinerzeit zwar die Dubletten definiert, muss aber mal schauen, ob ich die auch tatsächlich verwendet werden. Ansonstenwerde ich die Enums straffen und entsprechend der Lösung von MrDeveloper verwalten.

Danke für Eure Hinweise und Euch beiden ein +1!
09.03.2013
VbFan 460 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH