HashTable具有无限深度。为什么?如何避免?

比约恩·米斯蒂安(Bjorn Mistiaen)

当我使用$ emptyHashTable变量创建一个空的哈希表时,似乎会生成无尽的深度哈希表。不知道为什么。
当我使用@ {}时,它可以正常工作。

代码示例

cls

$L1     = "L1"
$emptyHashTable = @{}

# Correct, hashtable contains 1 sub-hashtable
$proj1       = @{}
$proj1."$L1" = @{}

# Wrong, endless hashtable depth
$proj2       = @{}
$proj2."$L1" = $emptyHashTable

# Wrong, endless hashtable depth
$proj3       = $emptyHashTable
$proj3."$L1" = @{}

# Wrong, endless hashtable depth
$proj4       = $emptyHashTable
$proj4."$L1" = $emptyHashTable

Write-Host
Write-Host "proj1"
Write-Host "Level 0: " $proj1.GetType()
Write-Host "Level 1: " $proj1.L1.GetType()
Write-Host "Level 2: " $proj1.L1.L1.GetType() # Will generate error: You cannot call a method on a null-valued expression.
Write-Host
Write-Host "proj2"
Write-Host "Level 0: " $proj2.GetType()
Write-Host "Level 1: " $proj2.L1.GetType()
Write-Host "Level 2: " $proj2.L1.L1.GetType()
Write-Host "Level 3: " $proj2.L1.L1.L1.GetType()
Write-Host "Level 4: " $proj2.L1.L1.L1.L1.GetType()
Write-Host
Write-Host "proj3"
Write-Host "Level 0: " $proj3.GetType()
Write-Host "Level 1: " $proj3.L1.GetType()
Write-Host "Level 2: " $proj3.L1.L1.GetType()
Write-Host "Level 3: " $proj3.L1.L1.L1.GetType()
Write-Host "Level 4: " $proj3.L1.L1.L1.L1.GetType()
Write-Host
Write-Host "proj4"
Write-Host "Level 0: " $proj4.GetType()
Write-Host "Level 1: " $proj4.L1.GetType()
Write-Host "Level 2: " $proj4.L1.L1.GetType()
Write-Host "Level 3: " $proj4.L1.L1.L1.GetType()
Write-Host "Level 4: " $proj4.L1.L1.L1.L1.GetType()

结果

proj1
Level 0:  System.Collections.Hashtable
Level 1:  System.Collections.Hashtable
You cannot call a method on a null-valued expression.
At D:\Xandorra\SQL\bmsHashTableTest.ps1:25 char:1
+ Write-Host "Level 2: " $proj1.L1.L1.GetType() # Will generate error: You cannot  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull


proj2
Level 0:  System.Collections.Hashtable
Level 1:  System.Collections.Hashtable
Level 2:  System.Collections.Hashtable
Level 3:  System.Collections.Hashtable
Level 4:  System.Collections.Hashtable

proj3
Level 0:  System.Collections.Hashtable
Level 1:  System.Collections.Hashtable
Level 2:  System.Collections.Hashtable
Level 3:  System.Collections.Hashtable
Level 4:  System.Collections.Hashtable

proj4
Level 0:  System.Collections.Hashtable
Level 1:  System.Collections.Hashtable
Level 2:  System.Collections.Hashtable
Level 3:  System.Collections.Hashtable

我正在使用Powershell 4.0
我的$ PSVersionTable:

Name                           Value                                                               
----                           -----                                                               
PSVersion                      4.0                                                                 
WSManStackVersion              3.0                                                                 
SerializationVersion           1.1.0.1                                                             
CLRVersion                     4.0.30319.34014                                                     
BuildVersion                   6.3.9600.17400                                                      
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}                                                
PSRemotingProtocolVersion      2.2                                                                 
比约恩·米斯蒂安(Bjorn Mistiaen)

这似乎是Powershell v4中的错误。
在Powershell v5中运行相同的代码时,不会出现无尽的深度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的链接具有无限宽度?

来自分类Dev

如何通过Javascript中的任意属性制作具有无限深度的对象?

来自分类Dev

为什么archive.ubuntu.com似乎具有无限嵌套的“ ubuntu”文件夹?

来自分类Dev

为什么didSet中没有无限循环?

来自分类Dev

具有无限列表的列表理解

来自分类Dev

具有无限/动态成员的枚举

来自分类Dev

具有无限参数的 UDF

来自分类Dev

具有无限参数的类 scala

来自分类Dev

是否可以创建具有无限无限滚动的网页?

来自分类Dev

在Java 8中产生具有无限循环的线程的最佳方法是什么?

来自分类Dev

如何从具有任意深度的深度嵌套的Hashtable中检索值?

来自分类Dev

为什么我在开发中没有无限的Firebase资源?

来自分类Dev

为什么覆盖python中的getattr方法时没有无限循环

来自分类Dev

如何构建具有无限循环的函数的后支配树?

来自分类Dev

如何在一个元素具有无限宽度的行中排列元素?

来自分类Dev

具有无限滚动的ListView:如何防止刷新可见行?

来自分类Dev

如何在finally块中停止具有无限循环的线程

来自分类Dev

考虑到其父级具有无限的高度,如何获取视图高度?

来自分类Dev

具有无限多个(未命名)参数的函数 - 如何正确访问这些参数?

来自分类Dev

为什么Python具有最大的递归深度?

来自分类Dev

使包含CSS列的div具有无限宽度

来自分类Dev

Angular JS使滑块具有无限效果

来自分类Dev

具有无限数量参数的Django urlpattern

来自分类Dev

Yii查询缓存具有无限的到期时间

来自分类Dev

Firefox中的丑陋字体具有无限性

来自分类Dev

创建具有无限JavaScript循环的计划报告

来自分类Dev

从数组中删除具有无限值的行

来自分类Dev

检索层次结构组...具有无限递归

来自分类Dev

Firefox中的丑陋字体具有无限性

Related 相关文章

  1. 1

    为什么我的链接具有无限宽度?

  2. 2

    如何通过Javascript中的任意属性制作具有无限深度的对象?

  3. 3

    为什么archive.ubuntu.com似乎具有无限嵌套的“ ubuntu”文件夹?

  4. 4

    为什么didSet中没有无限循环?

  5. 5

    具有无限列表的列表理解

  6. 6

    具有无限/动态成员的枚举

  7. 7

    具有无限参数的 UDF

  8. 8

    具有无限参数的类 scala

  9. 9

    是否可以创建具有无限无限滚动的网页?

  10. 10

    在Java 8中产生具有无限循环的线程的最佳方法是什么?

  11. 11

    如何从具有任意深度的深度嵌套的Hashtable中检索值?

  12. 12

    为什么我在开发中没有无限的Firebase资源?

  13. 13

    为什么覆盖python中的getattr方法时没有无限循环

  14. 14

    如何构建具有无限循环的函数的后支配树?

  15. 15

    如何在一个元素具有无限宽度的行中排列元素?

  16. 16

    具有无限滚动的ListView:如何防止刷新可见行?

  17. 17

    如何在finally块中停止具有无限循环的线程

  18. 18

    考虑到其父级具有无限的高度,如何获取视图高度?

  19. 19

    具有无限多个(未命名)参数的函数 - 如何正确访问这些参数?

  20. 20

    为什么Python具有最大的递归深度?

  21. 21

    使包含CSS列的div具有无限宽度

  22. 22

    Angular JS使滑块具有无限效果

  23. 23

    具有无限数量参数的Django urlpattern

  24. 24

    Yii查询缓存具有无限的到期时间

  25. 25

    Firefox中的丑陋字体具有无限性

  26. 26

    创建具有无限JavaScript循环的计划报告

  27. 27

    从数组中删除具有无限值的行

  28. 28

    检索层次结构组...具有无限递归

  29. 29

    Firefox中的丑陋字体具有无限性

热门标签

归档