Нужно проверить словарь другим способом или сделать словарь глобальным - PullRequest
1 голос
/ 21 апреля 2020

Мне нужно посмотреть, выбрал ли выпадающий список ключ из словаря. Словарь находится в другом методе (я считаю, что он называется методом). Я искал, как сделать словарь глобальным, но я не могу понять, как это сделать. Может быть, есть лучший способ?

Спасибо за любую помощь, я написал код, чтобы показать, что я пытаюсь выполнить sh ниже.

public void Dictionary()
        {
            var names = new Dictionary<string, double[]>();
            names.Add("Kevin", new[] { 74.5, 6.35});
            names.Add("Rob", new[] { 2.5, 9.46}); 
        }

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach (var kvp in names)
            {
                if combobox.Text == kvp.Key
                {
                    solution = true;
                }
            }

        }

Ответы [ 3 ]

0 голосов
/ 21 апреля 2020

Другой способ справиться с этим - вернуть словарь.

    public Dictionary GetDictionary()
    {
        var names = new Dictionary<string, double[]>();
        names.Add("Kevin", new[] { 74.5, 6.35});
        names.Add("Rob", new[] { 2.5, 9.46}); 
        return names;
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
     {
        foreach (var kvp in GetDictionary())
        {
           if (combobox.Text == kvp.Key) 
           {
             solution = true;
           }
        }
      }
0 голосов
/ 21 апреля 2020

Публикация метода c - это то, что делает его доступным во всем мире. Есть пара пропущенных частей: сам метод пропускает тип возвращаемого значения, и его нужно вызывать напрямую из метода combobox1_SelectedIndexChanged.

Рекомендуется не использовать зарезервированное имя из фреймворка. NET в пользовательском коде - здесь я изменил имя метода на GetDropdownChoices, добавил тип возврата, а затем вызвал метод вне foreach l oop. Для оптимизации производительности одним из предложенных вариантов является использование метода .ContainsKey вместо циклического прохождения каждого элемента в словаре.

    public Dictionary<string, double[]> GetDropdownChoices()
    {
        var names = new Dictionary<string, double[]>();
        names.Add("Kevin", new[] { 74.5, 6.35});
        names.Add("Rob", new[] { 2.5, 9.46}); 
        return names;
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        var choices = GetDropdownChoices();

        if (choices.ContainsKey(combobox.Text)) 
        {
             solution = true;
        }
    }
0 голосов
/ 21 апреля 2020
public class Foo
{
    private readonly Dictionary<string, double[]> _names;

    public Foo()
    {
        _names = new Dictionary<string, double[]>();
    }

    public void Dictionary() // note: this is just name taken from initial question
    {
        _names.Add("Kevin", new[] { 74.5, 6.35 });
        _names.Add("Rob", new[] { 2.5, 9.46 });
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        foreach (var kvp in _names)
        {
            if (combobox.Text == kvp.Key) // assuming you have already a declared "combobox" member
            {
                solution = true;
            }
        }

    }
}
...