我一直在寻找这里,我意识到类似的问题之前已经问过,我已经过了几个,但似乎是正确的似乎没有工作。c#字典从关键字选择值
我有以下方法,它从SQL查询中收集的DataSet中提取一组键值对。
public static Dictionary<string, string> LoadConfiguration()
{
DataSet sqlResults = data.GetSettings();
Dictionary<string, string> dict =
new Dictionary<String, String>();
foreach (DataRow dr in sqlResults.Tables[0].Rows)
{
dict.Add(
dr.Field<string>("key"), dr.Field<string>("value")
);
}
return dict;
}
这是因为,据我所看到得那样简单,但我从来没有真正借助词典之前,我是比较新的任何一种真正的编程打交道。
我知道,我的字典里所预期的数据,因为如果我遍历它在foreach,它给了我预期的结果
foreach (KeyValuePair<string, string> i in MyStuff.Configuration.LoadConfiguration())
{
Console.WriteLine("Key = " + i.Key + " Value = " + i.Value);
}
这给了我这是所有我实现了所以下面远
重点= EnableLdap值=假 重点= LdapPath值= LDAP:// DC =一些,DC =域,DC = com的 重点= SessionTimeout值= 60
但我只想从名为EnableLdap的密钥中选择一个特定值,例如
我的理解是,以下两种方法都是正确的。但是,当我尝试这种方式,我得到一个KeyNotFoundException
Dictionary<string,string> dict = MyStuff.Configuration.LoadConfiguration();
Console.WriteLine(dict["EnableLdap"]);
如果我试试这个,我收到了[出现InvalidOperationException:序列中没有匹配的元素]
Dictionary<string,string> dict = MyStuff.Configuration.LoadConfiguration();
Console.WriteLine(dict.Single(s => s.Key == "EnableLdap").Value);
如果我尝试这个,我刚刚得到什么
string value = "";
if (dict.TryGetValue("EnableLdap", out value))
{
dict["EnableLdap"] = value;
Console.WriteLine(value);
}
我敢肯定,我失去了一些东西简单在这里,答案将导致捂脸
SOLUTION:
我被后面的空格所捕获,就像在评论中建议的那样。解决方案是简单地添加一些修剪到我的行值,当它们添加到我的词典。
public static Dictionary<string, string> LoadConfiguration()
{
DataSet sqlResults = data.GetSettings();
Dictionary<string, string> dict =
new Dictionary<String, String>();
foreach (DataRow dr in sqlResults.Tables[0].Rows)
{
dict.Add(
dr.Field<string>("key").Trim(), dr.Field<string>("value").Trim()
);
}
return dict;
}
所以当迭代所有的结果,你看到输出'键= EnableLdap值= ...'? –
我强烈怀疑你没有“EnableLdap”作为关键字,但看起来*非常相似*。尝试打印出每个键的长度,当你迭代它时......你可能会发现里面有空白或不可见的字符。 –
可能有助于显示来自foreach循环的输出。它可能只是拼写错误? – code11