.net - 为什么我无法返回 System.Collections.Specialized.NameValueCollection 类型的值?

标签 .net function powershell return-type powershell-4.0

我可以创建 [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/

相关文章:

.NET 反射助手 API?

javascript - 为什么我可以多次声明一个javascript var?

powershell - 导入保存的 AzureRMContext 仍需要密码

windows - 是否可以在 Windows 上的 PowerShell 终端中有多个选项卡

regex - 正则表达式以选择UNC中的最后一个文件夹

c# - 正则表达式去除 JavaScript 双斜杠 (//) 风格的注释

c# - 从序列号生成激活 key

javascript - NodeJS - 如何将变量发送到嵌套回调? (MongoDB 查找查询)

c# - 如何从文本文件中删除逗号的最后一个索引?

c++ - 不理解通过函数传递的 C++ 参数