我可以创建 [System.Collections.Specialized.NameValueCollection]
的新实例类型,而且似乎工作正常。但是,如果我在函数内执行此操作,然后返回对象,则调用者会收到 [String]
(如果集合仅包含单个项目)或 [Object[]]
如果它包含多个项目(然后该数组中的每个项目都是 [String]
代表其中一个键)。
可以使用以下代码重现此内容:
function Test-ReturnType {
[CmdletBinding()]
param()
$nvc = New-Object System.Collections.Specialized.NameValueCollection
Write-Verbose $nvc.GetType() -Verbose
$nvc.Add('Name1','Value1')
$nvc.Add('Name2','Value2')
$nvc
}
$r = Test-ReturnType
Write-Verbose $r.GetType() -Verbose
我已确认 .Add()
方法有一个[void]
返回类型和管道至 Out-Null
不会改变行为。
我尝试添加 [OutputType()]
属性到函数,即使我知道这仅用于文档。
我尝试过转换 $nvc
在函数的最后一行(没有效果)。
我尝试过转换 $r
返回值Test-ReturnType
(异常(exception),无法转换)。
我只是不明白为什么这是不可能的。
如果我创建一个新的 [System.Net.WebClient]
例如,从函数中返回它,它工作得很好。
为什么[System.Collections.Specialized.NameValueCollection]
返回时转变成其存储的值?
最佳答案
Powershell 在这里“很有帮助”,并以与解开数组/等相同的方式为您解开您的集合。当他们进入管道时。
您需要通过添加一层数组/包装来“防止”这种情况,以便 powershell 来展开。
尝试将 ,$nvc
作为最后一行。
参见this question有关 powershell 展开的一些讨论。
关于.net - 为什么我无法返回 System.Collections.Specialized.NameValueCollection 类型的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32118702/