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 条评论
登录 后参与评论

相关文章

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

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

为什么会出现错误:超出最大更新深度。当我没有无限循环时?

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

如何启动具有无限内存的JVM?

为什么具有无限缓冲通道的生产者不返回通道或从通道返回无效数据?

具有无限参数的Java方法

具有无限参数的 UDF

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

具有无限参数的类 scala

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

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

Service Worker fetch 事件:为什么没有无限循环?

为什么当嵌入式类继承外部类时没有无限循环

为什么没有无限的ulimit,但很大的堆栈分配仍会失败?

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

为什么这里有无限循环?(链接列表打印)

当我不输入数字时为什么会有无限循环?

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

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

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

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

如何在Ruby on Rails中使用回形针制作具有无限图像的模型?

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

如何使用猫鼬填充具有无限嵌套级别的文档

如何在 express.js 中处理具有无限可能性的路由?

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

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

如何使用 sympy 找到具有无限解的方程组的特定解?