返回带/不带括号的函数调用的结果

ahi*_*ihi 5 powershell powershell-3.0

为什么以下代码中F和G的返回值存在差异?

Function F {
    Return (New-Object Collections.Generic.LinkedList[Object])
}

Function G {
    Return New-Object Collections.Generic.LinkedList[Object]
}

Function Write-Type($x) {
    If($null -eq $x) {
        Write-Host "null"
    } Else {
        Write-Host $x.GetType()
    }
}

Write-Type (F) # -> null
Write-Type (G) # -> System.Collections.Generic.LinkedList`1[System.Object]
Run Code Online (Sandbox Code Playgroud)

据我所知,如果一个函数返回某种空集合,PowerShell会将它"展开"为null,所以F做了我所期望的.但是G会发生什么?

编辑:正如JPBlanc所指出的,只有PowerShell 3.0才能展现出这种差异.在2.0中,两行都打印出来null.改变了什么?

JPB*_*anc 3

抱歉,我没有正确阅读您的问题,因为 F 是您正在使用 () 来评估该函数的函数。那么Write-Type在 PowerShell V2.0 中,函数的结果对我来说是相同的。

所以,在 PowerShell 3.0 中我遇到了你的问题。

现在使用:

Trace-Command -name TypeConversion -Expression {Write-Type (F)} -PSHost
Run Code Online (Sandbox Code Playgroud)

相对

Trace-Command -name TypeConversion -Expression {Write-Type (G)} -PSHost
Run Code Online (Sandbox Code Playgroud)

据我了解,返回对象之前的 () 会生成以下内容

 Converting "Collections.Generic.LinkedList" to "System.Type".
     Conversion to System.Type
         Conversion to System.Type
             Could not find a match for "System.Collections.Generic.LinkedList".
         Could not find a match for "Collections.Generic.LinkedList".
 Converting "Collections.Generic.LinkedList`1" to "System.Type".
     Conversion to System.Type
         Conversion to System.Type
             Found "System.Collections.Generic.LinkedList`1[T]" in the loaded assemblies.
 Converting "Object" to "System.Type".
     Conversion to System.Type
         Conversion to System.Type
             Found "System.Object" in the loaded assemblies.
Run Code Online (Sandbox Code Playgroud)