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.改变了什么?
抱歉,我没有正确阅读您的问题,因为 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)
| 归档时间: |
|
| 查看次数: |
526 次 |
| 最近记录: |