powershell – 将Ordered Hashtable传递给函数

前端之家收集整理的这篇文章主要介绍了powershell – 将Ordered Hashtable传递给函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何将有序哈希表传递给函数

以下引发错误“只能在散列文字节点上指定有序属性.”

  1. function doStuff {
  2. Param (
  3. [ordered]$theOrderedHashtable
  4. )
  5. $theOrderedHashtable
  6. }
  7.  
  8. $datFileWithMinSizes = [ordered]@{"FileA.DAT" = "4"; "FileB.DAT" = "5"; "FileC.DAT" = "91" ; "FileD.DAT" = "847" }
  9.  
  10.  
  11. doStuff -theOrderedHashtable $datFileWithMinSizes

以下不保持正确的顺序:

  1. function doStuff {
  2. Param (
  3. [Hashtable]$theOrderedHashtable = [ordered]@{}
  4. )
  5. $theOrderedHashtable
  6. }
  7.  
  8. $datFileWithMinSizes = [ordered]@{"FileA.DAT" = "4"; "FileB.DAT" = "5"; "FileC.DAT" = "91" ; "FileD.DAT" = "847" }
  9.  
  10.  
  11. doStuff -theOrderedHashtable $datFileWithMinSizes

我目前能够使用它的唯一方法是不指定类型如下,但我想指定类型:

  1. function doStuff {
  2. Param (
  3. $theOrderedHashtable
  4. )
  5. $theOrderedHashtable
  6. }
  7.  
  8. $datFileWithMinSizes = [ordered]@{"FileA.DAT" = "4"; "FileB.DAT" = "5"; "FileC.DAT" = "91" ; "FileD.DAT" = "847" }
  9.  
  10.  
  11. doStuff -theOrderedHashtable $datFileWithMinSizes

解决方法

使用完整类型名称
  1. function Do-Stuff {
  2. param(
  3. [System.Collections.Specialized.OrderedDictionary]$OrderedHashtable
  4. )
  5. $OrderedHashtable
  6. }

支持常规哈希表和有序词典,您必须使用单独的参数集:使用[System.Collections.IDictionary]接口,如suggested by briantist

  1. function Do-Stuff {
  2. [CmdletBinding(DefaultParameterSetName='Ordered')]
  3. param(
  4. [Parameter(Mandatory=$true,Position=0,ParameterSetName='Ordered')]
  5. [System.Collections.Specialized.OrderedDictionary]$OrderedHashtable,[Parameter(Mandatory=$true,ParameterSetName='Hashtable')]
  6. [hashtable]$Hashtable
  7. )
  8. if($PSCmdlet.ParameterSetName -eq 'Hashtable'){
  9. $OrderedHashtable = $Hashtable
  10. }
  11. $OrderedHashtable
  12. }

猜你在找的Java相关文章