Powershell哈希集成员错误地强制转换到哈希集

Powershell哈希集成员错误地强制转换到哈希集,powershell,scripting,Powershell,Scripting,最后,您可以找到我的代码片段。 在不在代码段中的代码中,我创建了一个节点树。节点由OrgUnit类表示 正如您所看到的,这个类有一个父属性attr,它是一组字符串。 树被正确地创建了,我已经做了一些测试,看起来一切都很好 因此,我创建了一个名为PrintBranchUp的简单节点-->根表示函数。这就是我很快遇到麻烦的地方 我看到的第一个节点被正确添加的行为是有意义的 $branch.Add($node) 第二个节点也已正确添加,但第三个节点刚刚以字母形式返回。。因此,循环的第二次迭代不知何故

最后,您可以找到我的代码片段。 在不在代码段中的代码中,我创建了一个节点树。节点由OrgUnit类表示

正如您所看到的,这个类有一个父属性attr,它是一组字符串。 树被正确地创建了,我已经做了一些测试,看起来一切都很好

因此,我创建了一个名为
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
的地方在哪里?)