Powershell哈希集成员错误地强制转换到哈希集
最后,您可以找到我的代码片段。 在不在代码段中的代码中,我创建了一个节点树。节点由OrgUnit类表示 正如您所看到的,这个类有一个父属性attr,它是一组字符串。 树被正确地创建了,我已经做了一些测试,看起来一切都很好 因此,我创建了一个名为Powershell哈希集成员错误地强制转换到哈希集,powershell,scripting,Powershell,Scripting,最后,您可以找到我的代码片段。 在不在代码段中的代码中,我创建了一个节点树。节点由OrgUnit类表示 正如您所看到的,这个类有一个父属性attr,它是一组字符串。 树被正确地创建了,我已经做了一些测试,看起来一切都很好 因此,我创建了一个名为PrintBranchUp的简单节点-->根表示函数。这就是我很快遇到麻烦的地方 我看到的第一个节点被正确添加的行为是有意义的 $branch.Add($node) 第二个节点也已正确添加,但第三个节点刚刚以字母形式返回。。因此,循环的第二次迭代不知何故
PrintBranchUp
的简单节点-->根表示函数。这就是我很快遇到麻烦的地方
我看到的第一个节点被正确添加的行为是有意义的
$branch.Add($node)
第二个节点也已正确添加,但第三个节点刚刚以字母形式返回。。因此,循环的第二次迭代不知何故使$parents=$tmp.parents
表现为字符串而不是哈希集?我花了很长时间才修好(我确实修好了),但我不明白为什么
所以问题是迭代1中的$node=$parents[0]
显然没有从hashset返回字符串,而是从hashset返回字符串。。但是,当我在调试期间打印它时,它看起来就像一个字符串。下一次调用$tmp=$tree[$node]
实际上会正确返回下一个节点。只有当它的父项被调用时,父项才成为字符串而不是哈希集
有人能解释一下这种行为吗?我真的不能对它掉以轻心。最后修复它的是将$node强制转换为字符串$tmp=$tree[[String]$node]
这太傻了
Class OrgUnit
{
[String]$name
$parents
$children
$members
OrgUnit($name){
$this.name = $name
$this.parents = New-Object System.Collections.Generic.HashSet[string]
$this.children = New-Object System.Collections.Generic.HashSet[string]
$this.members = New-Object System.Collections.Generic.HashSet[string]
}
}
Function PrintBranchUp($tree, $node){
$branch = New-Object System.Collections.Generic.List[string]
$branch.Add($node)
while($true){
$tmp = $tree[$node]
$parents = $tmp.parents
if($parents.Count -gt 0){
$node = $parents[0]
$branch.Add($node)
}
else{
break
}
}
return $branch
}
# $tree = OrgTree-Create($inputfile)
$tmp = "Business Unit"
$branch = PrintBranchUp $tree $tmp
这回答了你的问题吗?(通常,搜索单词
PowerShell unroll
,您会发现许多类似的问题和解释。)如果您需要有关现有代码的帮助,请发布完整代码以重现该问题(定义了OrgTree Create
的地方在哪里?)