需要用另一种方法检查字典,或者使字典全局化



我需要查看下拉框是否从字典中选择了一个键。这本词典是用另一种方法编写的(我相信它叫做方法(。我一直在寻找如何使词典全球化,但我不知道如何做到。也许有更好的方法?

感谢您的帮助,我写了一些代码来展示我正在努力实现的目标。

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

处理此问题的另一种方法是返回Dictionary。

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

使方法公开是使其全局可访问的原因。缺少几个部分:方法本身缺少返回类型,需要从combobox1_SelectedIndexChanged方法直接调用它。

最好不要在自定义代码中使用.NET框架中的保留名称-在这里,我将方法名称更改为GetDropdownChoices,添加了一个返回类型,然后在foreach循环之外调用该方法。对于性能优化,一个建议是使用.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;
}
}
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;
}
}
}
}

相关内容

最新更新