无法过滤Switch内的嵌套Hashtable

时间:2017-06-28 22:53:57

标签: powershell hashtable

我已经使用2个组合框构建了一个WPF表单,这两个组合框都填充了Nested Hashtable的查询。

当脚本运行并加载表单时,

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

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

使用$cboAgencies.SelectedItem运行此代码我查询各种变量并发现以下变量都是正确的:

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

但是$ arr_Offices是空的,这意味着问题发生在这一行:

Switch

我通过将其置于$Script:arr_Offices = ($Script:hash_AgencyOffices['division2']['subdivision1'] | Sort-Object) $Script:arr_Offices | ForEach-Object { $Script:cboOffices.Items.Add($_) | Out-Null } 函数之外进一步确认了这一点:

$arr_Offices

$cboOfficesthis.setState({results: something})填好。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

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

您的数据结构是“根哈希表,其中包含密钥,其值为哈希表,其中包含密钥,其值为直接包含内容的数组”。

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