Benutzer mit den meisten Antworten
Enumeration

Frage
-
Hallo,
ich habe in einer Klasse eine Enumeration erzeugt.Private Enum Alignment
left
centric
right
End Enum
Die Variable
Dim startAlignment As Alignment
erhält einen Wert:
startAlignment = Alignment.leftJetzt will ich die Variable auswerten:
If startAlignment = Alignment.left ThenDies funktioniert nicht. Eine Auswertung ist nur so möglich:
If startAlignment = 1 ThenWas muss ich ändern, damit eine Auswertung wie eigentlich gedacht möglich ist?
If startAlignment = Alignment.left Then
Alexander
Antworten
-
Hallo Alexander,
ich weis nicht was Du geschrieben hast. Bei mir funktioniert das einwandfrei. Alle Abfragen und die Anweisungen werden korrekt ausgeführt. Am besten kopierst Du diesen Code in ein Console Projekt und probierst es selber. Im zweiten Teil dieses Codes habe ich noch einige Möglichkeiten aufgezeigt wie man enums konvertieren kann. Vielleicht ist das hilfreich.
Frohes neues Jahr und viele Grüße Ellen
Module Module1 Private Enum Alignment Left centric Right End Enum Sub Main() Dim startAlignment As Alignment 'erhält einen Wert: startAlignment = Alignment.left ' If startAlignment = Alignment.Left Then startAlignment = Alignment.centric End If ' OK geht ' If startAlignment = 1 Then startAlignment = Alignment.Right End If ' OK geht auch ' If startAlignment = Alignment.Left Then startAlignment = Alignment.Right End If ' OK geht 'Konvertierungen und Operationen mit enum For Each al As Alignment In [Enum].GetValues(GetType(Alignment)) Console.WriteLine("alignment: {0} /binärer Wert: {1} /logischer Vergleich: {2} /text: {3}", _ al, _ CType(al, Integer), _ startAlignment = al, _ al.ToString) Next 'Umwandlung zurück in ein Enum-Element aus einem String. Dim s As String = "Left" startAlignment = DirectCast([Enum].Parse(GetType(Alignment), s), Alignment) Console.WriteLine("string: {0} /alignment: {1}", s, startAlignment) Console.ReadLine() End Sub End Module
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort vorgeschlagen Dennis Becker Mittwoch, 5. Januar 2011 14:25
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. Januar 2011 17:56
-
Innerhalb der Enumeration Alignment erhält der Wert left den Wert 1. Ich würde aber gerne die Variable startAlignment nicht nach 1,2 oder 3
Alexander,
also erstens beginnt in .NET default ein Enum bei 0 (zero) aufsteigend:
Enum-Anweisung (Visual Basic)
http://msdn.microsoft.com/de-de/library/8h84wky1.aspx
"Wenn Sie initializer für einen Member nicht angeben,
initialisiert Visual Basic diesen Parameter entweder mit 0..."
somit bekommt 'Alignment.left' den Wert 0 dann centric=1 right=2.
Und zweitens basiert Enum nun mal default auf dem 'Integer' Datentyp.
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. Januar 2011 17:56
Alle Antworten
-
Hallo Thomas,
es gibt keine Fehlermeldung, da - wie bereits beschrieben - die Variable startAlignment den Wert 1 enthält und nicht Alignment.left.
Innerhalb der Enumeration Alignment erhält der Wert left den Wert 1. Ich würde aber gerne die Variable startAlignment nicht nach 1,2 oder 3 auswerten, sondern nach Alignment.left u.s.w.
Alexander
-
Innerhalb der Enumeration Alignment erhält der Wert left den Wert 1. Ich würde aber gerne die Variable startAlignment nicht nach 1,2 oder 3
Alexander,
also erstens beginnt in .NET default ein Enum bei 0 (zero) aufsteigend:
Enum-Anweisung (Visual Basic)
http://msdn.microsoft.com/de-de/library/8h84wky1.aspx
"Wenn Sie initializer für einen Member nicht angeben,
initialisiert Visual Basic diesen Parameter entweder mit 0..."
somit bekommt 'Alignment.left' den Wert 0 dann centric=1 right=2.
Und zweitens basiert Enum nun mal default auf dem 'Integer' Datentyp.
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. Januar 2011 17:56
-
Hallo Alexander,
ich weis nicht was Du geschrieben hast. Bei mir funktioniert das einwandfrei. Alle Abfragen und die Anweisungen werden korrekt ausgeführt. Am besten kopierst Du diesen Code in ein Console Projekt und probierst es selber. Im zweiten Teil dieses Codes habe ich noch einige Möglichkeiten aufgezeigt wie man enums konvertieren kann. Vielleicht ist das hilfreich.
Frohes neues Jahr und viele Grüße Ellen
Module Module1 Private Enum Alignment Left centric Right End Enum Sub Main() Dim startAlignment As Alignment 'erhält einen Wert: startAlignment = Alignment.left ' If startAlignment = Alignment.Left Then startAlignment = Alignment.centric End If ' OK geht ' If startAlignment = 1 Then startAlignment = Alignment.Right End If ' OK geht auch ' If startAlignment = Alignment.Left Then startAlignment = Alignment.Right End If ' OK geht 'Konvertierungen und Operationen mit enum For Each al As Alignment In [Enum].GetValues(GetType(Alignment)) Console.WriteLine("alignment: {0} /binärer Wert: {1} /logischer Vergleich: {2} /text: {3}", _ al, _ CType(al, Integer), _ startAlignment = al, _ al.ToString) Next 'Umwandlung zurück in ein Enum-Element aus einem String. Dim s As String = "Left" startAlignment = DirectCast([Enum].Parse(GetType(Alignment), s), Alignment) Console.WriteLine("string: {0} /alignment: {1}", s, startAlignment) Console.ReadLine() End Sub End Module
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort vorgeschlagen Dennis Becker Mittwoch, 5. Januar 2011 14:25
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 5. Januar 2011 17:56