我有一个函数接受一个枚举值作为参数。例如,考虑如下内容:

(PS) > function IsItFriday([System.DayOfWeek] $dayOfWeek) {
    if($dayOfWeek -eq [System.DayOfWeek]::Friday) {
        "yes"
    } else {
        "no"
    }
}

现在,如果我这样调用它,一切都很好:
(PS) > $m = [System.DayOfWeek]::Monday
(PS) > IsItFriday $m
no

但是,如果我调用直接传递枚举值的函数,则会得到一个相当隐秘的错误:
(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

用枚举值初始化变量和直接传递枚举值有什么区别?

最佳答案

是的,那是一个相当困惑的错误消息。我认为您可以通过以下示例更好地理解:

Get-ChildItem -Path C:\

请注意C:\周围没有引号,因为,一,它隐式地转换为字符串,二,当您将路径作为参数传递给某个被调用者时,没有必要将不包含空格的路径括起来。

因此,让我们回到您的函数,并对其进行一些更改:
function IsItFriday($dayOfWeek)
{
    $dayOfWeek.GetType()

    if ($dayOfWeek -eq [System.DayOfWeek]::Friday)
    {
        "yes"
    }
    else
    {
        "no"
    }
}

IsItFriday [System.DayOkWeek]::Monday

...以及输出:
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object
no

看看那里发生了什么? PowerShell认为您传递的是字符串而不是枚举值,所以这就是为什么要获取Cannot convert value "[System.DayOfWeek]::Monday"的原因,因为这是传入的文字字符串。

关于powershell - 将枚举值传递给PowerShell中的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3289573/

10-11 18:33