Enumerationswerte an eine Funktion in PowerShell übergeben

8

Ich habe eine Funktion, die einen Enum-Wert als Parameter akzeptiert. Betrachten Sie zum Beispiel etwas wie:

%Vor%

Nun, wenn ich es so aufrufe, ist alles in Ordnung:

%Vor%

Aber wenn ich die Funktion rufe, die den Enum-Wert direkt weitergibt, bekomme ich einen ziemlich kryptischen Fehler:

%Vor%

Was ist der Unterschied zwischen der Initialisierung einer Variablen mit dem Enum-Wert und der direkten Übergabe des Enum-Wertes?

    
Paolo Tedesco 20.07.2010, 11:49
quelle

4 Antworten

8

Ja, das ist eine ziemlich verwirrende Fehlermeldung. Ich denke du würdest es besser mit einem Beispiel verstehen:

%Vor%

Beachten Sie, dass es keine Anführungszeichen um C:\ gibt, weil eine implizit in eine Zeichenkette umgewandelt wird, und zwei, es ist nicht notwendig, einen Pfad einzuschließen, der keine Leerzeichen enthält, wenn Sie den Pfad als Parameter an einige übergeben Angerufener.

Lasst uns also zu Ihrer Funktion zurückkehren und sie leicht ändern:

%Vor%

... und die Ausgabe:

%Vor%

Siehst du, was dort passiert ist? PowerShell denkt, dass Sie eine Zeichenfolge anstelle eines Aufzählungswerts übergeben. Deshalb erhalten Sie Cannot convert value "[System.DayOfWeek]::Monday" , da dies die Literalzeichenfolge ist, die übergeben wird.

    
George Howarth 20.07.2010, 12:38
quelle
11

Es ist ein wenig unerwartet - Sie müssen es in Klammern einschließen, damit der Wert ausgewertet wird:

%Vor%

es ist auch möglich nur Strings wie folgt zu übergeben:

%Vor%

PowerShell konvertiert es in den Enum-Typ. Praktisch, nicht wahr?)

    
stej 20.07.2010 11:58
quelle
6

Um den Fehler zu vermeiden, setzen Sie den enum-Wert in Klammern:

PS & gt; IsItFriday ([System.DayOfWeek] :: Montag)
nein

PS & gt; IsItFriday ([System.DayOfWeek] :: Freitag)
ja

    
Shay Levy 20.07.2010 21:14
quelle
3

Noch praktischer ist es, dass Strings in Enumerationswerte umgewandelt werden, wenn sie gültig sind:

%Vor%     
JasonMArcher 22.07.2010 22:20
quelle

Tags und Links