无法过滤 Switch 内的嵌套哈希表

Trouble filtering a Nested Hashtable inside a Switch

我构建了一个带有 2 个组合框的 WPF 表单,它们都填充了来自此 的查询。

cboAgencies 在脚本运行和表单加载时填充。 cboOffices 基于在 cboAgencies 中所做的选择,并列出特定于所选机构的办公地点。

或者,它应该是。

相关代码如下:

$cboAgencies.Add_SelectionChanged({

    $Script:selectedAgency = $cboAgencies.SelectedItem.ToString()
    $Script:cboOffices.Items.Clear()
    $Script:selectedAdmin = $null

    Switch($Script:selectedAgency) {
        subdivision1 {
            $Script:selectedAdmin = 'division2'
            $Script:arr_Offices = ($Script:hash_AgencyOffices[$Script:selectedAdmin][$Script:selectedAgency].Keys | Sort-Object)
            $Script:arr_Offices | ForEach-Object {
                $Script:cboOffices.Items.Add($_) | Out-Null
            }
            break
        }
        subdivision2 {
            $Script:selectedAdmin = 'division2'
            $Script:arr_Offices = ($Script:hash_AgencyOffices[$Script:selectedAdmin][$Script:selectedAgency].Keys | Sort-Object)
            $Script:arr_Offices | ForEach-Object {
                $Script:cboOffices.Items.Add($_) | Out-Null
            }
            break
        }
        division1 {
            $Script:selectedAdmin = 'division1'
            $Script:arr_Offices = ($Script:hash_AgencyOffices[$Script:selectedAdmin][$Script:selectedAgency].Keys | Sort-Object)
            $Script:arr_Offices | ForEach-Object {
                $Script:cboOffices.Items.Add($_) | Out-Null
            }
            break
        }
    }
})

注意:代码是匿名的。哈希表中的实际分区或细分名称中没有空格。以防万一这是一个问题。

运行这段代码使用. .\script.ps1我查询了各个变量,发现以下变量都是正确的:

但是$arr_Offices是空的,说明问题出在这一行:

$Script:arr_Offices = ($Script:hash_AgencyOffices[$Script:selectedAdmin][$Script:selectedAgency].Keys | Sort-Object)

我通过将它放在 Switch 函数之外进一步证实了这一点:

$Script:arr_Offices = ($Script:hash_AgencyOffices['division2']['subdivision1'] | Sort-Object)
$Script:arr_Offices | ForEach-Object {
    $Script:cboOffices.Items.Add($_) | Out-Null
}

还有$arr_Offices$cboOffices填就好了

我做错了什么?

根据您的链接问题,$script:hash_AgencyOffices[$Script:selectedAdmin][$Script:se‌​lectedAgency] 生成一个字符串数组,它不会有 .Keys 属性.

你的数据结构是“有键的根哈希表,它们的值是有键的哈希表,它们的值是直接有内容的数组”。

因此您可以使用 AgencyOffices['division2'].KeysAgencyOffices['division2']['subdivision1'],但不能使用 AgencyOffices['division2']['subdivision1'].Keys