我有这个类Form1.cs,我创建了我的GUI,它还有一个具有以下功能的组合框:
string SelectedItemName = (string)comboBox2.SelectedItem.ToString();
Console.WriteLine(SelectedItemName);
if (comboBox2.SelectedIndex > -1)
{
testvariabel2.GetSessionName();
}
所以我检查用户是否从ComboBox中选择了一些内容,而不是在我的其他类CTestRack.cs中调用函数GetSessionName。
Dictionary<string, Dictionary<string, string>> newDictionary = new Dictionary<string,Dictionary<string, string>>();
foreach (SectionData section in data.Sections)
{
var keyDictionary = new Dictionary<string, string>();
foreach (KeyData key in section.Keys)
keyDictionary.Add(key.KeyName.ToString(), key.Value.ToString());
newDictionary.Add(section.SectionName.ToString(), keyDictionary);
if (newDictionary.ContainsKey(testvariabel.SelectedItemName))
{
Console.WriteLine("Key: {0}, Value: {1}", keyDictionary[testvariabel.SelectedItemName]);
}
else Console.WriteLine("Couldn't check Selected Name");
}
这里我想检查我的Dictionary中是否存在String SelectedItemName,但我总是得到Systen.ArgumentNullException,表明我的CTestRackClass中的String SelectedItemName为NULL。
现在我的问题是,我如何在CTestRack中搜索其他类中设置的字符串 Form1?
答案 0 :(得分:1)
嗯......实际上你正好看着字典!要查明字典中是否存在密钥,请使用ContainsKey
。
if(myDictionary.ContainsKey(myKey))
{
//do something
}
但是,您的问题来自于null永远不是字典中的有效键(主要是因为null没有正确的哈希码)。因此,您需要确保您要查找的密钥不为空。从您的代码中,我猜testvariabel.SelectedItemName
尚未设置。
此外,在使用它之前,有一种更有效的方法可以查看值是否存在。使用TryGetValue
:
TValue val;
if(myDictionary.TryGetValue(myKey, out val))
{
//do something with val
}
这样你就不需要访问myDictionary [myKey]了。如果您使用ContainsKey
,则实际上是两次访问相同的值。在大多数情况下成本很低,但很容易避免,所以你应该试一试。
请注意,我只回答了有关查字典的具体问题。我不能说你的代码整体的正确性。
答案 1 :(得分:0)
我发现您的代码存在两个明显的问题。