如何验证我分配给组合框的字典值是我认为的值?

How can I verify the Dictionary values I've assigned to a combobox are what I think they are?

我有这段代码可以将字典分配给组合框:

Dictionary<String, String> dict = ReportRunnerConstsAndUtils.GetReportGeneratorsDictionary();
comboBoxReportRunners.DataSource = new BindingSource(dict, null);
comboBoxReportRunners.DisplayMember = "Key";
comboBoxReportRunners.ValueMember = "Value";

我想验证项目的 DisplayMembers 和 ValueMembers 是否符合我的预期。这似乎是一种合乎逻辑的测试方法:

foreach (var v in comboBoxReportRunners.Items)
{
    MessageBox.Show(v.DisplayMember.ToString());
    MessageBox.Show(v.ValueMember.ToString());
}

...但无法编译;我得到,“'object' 不包含 'DisplayMember' 的定义并且没有扩展方法 'DisplayMember' 接受类型 'object' 的第一个参数可以找到(是您缺少 using 指令或程序集引用?)'" 和 'ValueMember'

的相同错误信息

我需要查看(仅一次)哪些值存储为每个项目的 DisplayMember 和 ValueMember?

尝试这种方式:

foreach (KeyValuePair<string,string> v in comboBoxReportRunners.Items)
{
    MessageBox.Show(v.Key.ToString());
    MessageBox.Show(v.Value.ToString());
}  

字典使用KeyValuePair存储数据

DisplayMemberValueMember 是组合框的属性,而不是其中包含的项目的属性。如错误所述,组合框中的项目属于 Object 类型,因此如果您想要访问它们的属性,您必须先进行强制转换。你的数据源是 Dictionary<String, String> 类型,它是 KeyValuePair<string,string> 的集合,所以在 foreach 循环中你必须使用这种类型(有两种可能的方式):

foreach (KeyValuePair<string,string> v in comboBoxReportRunners.Items)
{
    MessageBox.Show(v.Key.ToString());
    MessageBox.Show(v.Value.ToString());
}

foreach (var v in comboBoxReportRunners.Items)
{
    KeyValuePair<string,string> val = v as KeyValuePair<string,string>;
    MessageBox.Show(val.Key.ToString());
    MessageBox.Show(val.Value.ToString());
}