Как я могу убедиться, что значения словаря, которые я присвоил списку, являются такими, какими я их считаю?

У меня есть этот код для назначения словаря в поле со списком:

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());
}

... но это не компилируется; Я получаю, "объект" не содержит определения для "DisplayMember", и не может быть найден метод расширения "DisplayMember", принимающий первый аргумент типа "объект" (вам не хватает директивы using или ссылки на сборку?) '" и то же сообщение об ошибке для ValueMember

Что мне нужно увидеть (только один раз), какие значения хранятся как DisplayMember и ValueMember каждого элемента?

2 ответа

Решение

Попробуйте так:

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

Словарь хранит данные, используя KeyValuePair

DisplayMember а также ValueMember являются свойствами поля со списком, а не элементов, содержащихся в нем. Как говорится в ошибке, элементы в поле со списком имеют тип 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());
}
Другие вопросы по тегам