Tengo una función que acepta un valor enum como parámetro. Como ejemplo, considere algo como:Pasando valores enum a una función en PowerShell
(PS) > function IsItFriday([System.DayOfWeek] $dayOfWeek) {
if($dayOfWeek -eq [System.DayOfWeek]::Friday) {
"yes"
} else {
"no"
}
}
Ahora, si invoco como este, todo está bien:
(PS) > $m = [System.DayOfWeek]::Monday
(PS) > IsItFriday $m
no
Pero si llamo a la función que pasa directamente el valor de enumeración, me sale una de error en lugar críptica:
(PS) > IsItFriday [System.DayOfWeek]::Monday
IsItFriday : Cannot convert value "[System.DayOfWeek]::Monday" to type "System.DayOfWeek"
due to invalid enumeration values. Specify one of the following enumeration values and
try again. The possible enumeration values are "Sunday, Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday".
At line:1 char:11
+ IsItFriday <<<< [System.DayOfWeek]::Monday
¿Cuál es la diferencia entre la inicialización de una variable con el valor de enumeración y pasar el valor de enumeración directamente?
que sabía acerca de la conversión implícita, de hecho a mano :) Lo que no entiendo, de todos modos, es por qué existe esta diferencia en los dos casos ... La razón es –
que en 'IsItFriday [System.DayOfWeek] :: Monday' se analiza como una cadena. La explicación completa se puede encontrar en PowerShell in Action de Bruce Payette. Es lo mismo que 'write-host get-date' vs.' write-host (get-date) '. – stej