我有一个函数接受枚举值作为参数.举个例子,考虑如下:
(PS) > function IsItFriday([System.DayOfWeek] $dayOfWeek) {
if($dayOfWeek -eq [System.DayOfWeek]::Friday) {
"yes"
} else {
"no"
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我像这样调用它,一切都很好:
(PS) > $m = [System.DayOfWeek]::Monday
(PS) > IsItFriday $m
no
Run Code Online (Sandbox Code Playgroud)
但是,如果我调用函数直接传递枚举值,我会得到一个相当神秘的错误:
(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
Run Code Online (Sandbox Code Playgroud)
将变量初始化为枚举值并直接传递枚举值有什么区别?
ste*_*tej 13
这有点出乎意料 - 您需要将其包装在括号中,以便评估该值:
> IsItFriday ([System.DayOfWeek]::Monday)
Run Code Online (Sandbox Code Playgroud)
也可以只传递这样的字符串:
> IsItFriday Monday
no
> IsItFriday Friday
yes
Run Code Online (Sandbox Code Playgroud)
PowerShell会将其转换为枚举类型.好用,不是吗:)
是的,这是一个相当混乱的错误消息.我想你会更好地理解一个例子:
Get-ChildItem -Path C:\
Run Code Online (Sandbox Code Playgroud)
请注意,周围没有引号,C:\
因为,一,它实际上转换为一个字符串,两个,当您将路径作为参数传递给某个被调用者时,没有必要包含一个不包含空格的路径.
所以让我们回到你的功能,并稍微改变一下:
function IsItFriday($dayOfWeek)
{
$dayOfWeek.GetType()
if ($dayOfWeek -eq [System.DayOfWeek]::Friday)
{
"yes"
}
else
{
"no"
}
}
IsItFriday [System.DayOkWeek]::Monday
Run Code Online (Sandbox Code Playgroud)
......和输出:
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
no
Run Code Online (Sandbox Code Playgroud)
看看那里发生了什么?PowerShell认为你传入的是字符串而不是枚举值,所以这就是你得到的Cannot convert value "[System.DayOfWeek]::Monday"
原因,因为那是传入的文字字符串.
为避免错误,将枚举值放在括号中:
PS> IsItFriday([System.DayOfWeek] ::星期一)
没有
PS> IsItFriday([System.DayOfWeek] ::星期五)
是的
更方便的是,如果有效,字符串将被转换为枚举值:
function IsItFriday([System.DayOfWeek] $dayOfWeek) {
if($dayOfWeek -eq [System.DayOfWeek]::Friday) {
"yes"
} else {
"no"
}
}
PS 7> IsItFriday Monday
no
PS 8> IsItFriday Friday
yes
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12617 次 |
最近记录: |