Powershell 传入一个空集合将抛出一个错误

Powershell 传入一个空集合将抛出一个错误,powershell,set,hashset,powershell-4.0,Powershell,Set,Hashset,Powershell 4.0,根据答案,我正在尝试在powershell脚本中使用哈希集 但是如果我做一个函数,它期望这样一个集合 function foo([Parameter(Mandatory=$true)][Collections.Generic.HashSet[string]]$set){ 然后在集合中传球 foo($set) 如果$set为空,则会出现错误: Cannot bind argument to parameter '$set' because it is an empty collection.

根据答案,我正在尝试在powershell脚本中使用
哈希集

但是如果我做一个函数,它期望这样一个集合

function foo([Parameter(Mandatory=$true)][Collections.Generic.HashSet[string]]$set){
然后在集合中传球

foo($set)
如果
$set
为空,则会出现错误:

Cannot bind argument to parameter '$set' because it is an empty collection.
    + CategoryInfo          : InvalidData: (:) [script.ps1], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyCollectionNotAllowed,script.ps1
但是如果我事先在
$set
中添加了一些内容,我就不会遇到问题


为什么参数不能绑定到一个空集,我如何才能让它绑定到这样一个集合?

您可以使用
AllowEmptyCollection
属性将函数标记为允许空哈希表:

function foo([Parameter(Mandatory=$true)][AllowEmptyCollection()][Collections.Generic.HashSet[string]]$set)

您可以使用
AllowEmptyCollection
属性将函数标记为允许空哈希表:

function foo([Parameter(Mandatory=$true)][AllowEmptyCollection()][Collections.Generic.HashSet[string]]$set)

您可以使用
AllowEmptyCollection
属性将函数标记为允许空哈希表:

function foo([Parameter(Mandatory=$true)][AllowEmptyCollection()][Collections.Generic.HashSet[string]]$set)

您可以使用
AllowEmptyCollection
属性将函数标记为允许空哈希表:

function foo([Parameter(Mandatory=$true)][AllowEmptyCollection()][Collections.Generic.HashSet[string]]$set)


PowerShell不希望强制参数为空,并在默认情况下强制执行此选项。但是,如果您想允许,可以根据您的情况使用AllowFull、AllowEmptyString、AllowEmptyCollection。有趣。你有关于为什么会这样的链接吗?它记录在
获取关于函数的帮助\u高级\u参数
(在technet上)@DavidGrinberg很简单,允许你传递“nothing”有点违背了强制命令的目的attribute@MathiasR.Jessen那太傻了。在C#中,传入空集合没有问题。PowerShell不希望强制参数为空,并在默认情况下强制执行此操作。但是,如果您想允许,可以根据您的情况使用AllowFull、AllowEmptyString、AllowEmptyCollection。有趣。你有关于为什么会这样的链接吗?它记录在
获取关于函数的帮助\u高级\u参数
(在technet上)@DavidGrinberg很简单,允许你传递“nothing”有点违背了强制命令的目的attribute@MathiasR.Jessen那太傻了。在C#中,传入空集合没有问题。PowerShell不希望强制参数为空,并在默认情况下强制执行此操作。但是,如果您想允许,可以根据您的情况使用AllowFull、AllowEmptyString、AllowEmptyCollection。有趣。你有关于为什么会这样的链接吗?它记录在
获取关于函数的帮助\u高级\u参数
(在technet上)@DavidGrinberg很简单,允许你传递“nothing”有点违背了强制命令的目的attribute@MathiasR.Jessen那太傻了。在C#中,传入空集合没有问题。PowerShell不希望强制参数为空,并在默认情况下强制执行此操作。但是,如果您想允许,可以根据您的情况使用AllowFull、AllowEmptyString、AllowEmptyCollection。有趣。你有关于为什么会这样的链接吗?它记录在
获取关于函数的帮助\u高级\u参数
(在technet上)@DavidGrinberg很简单,允许你传递“nothing”有点违背了强制命令的目的attribute@MathiasR.Jessen那太傻了。在C#中,传入空集合没有问题。