私はここで検索していますが、これまでに同様の質問があったことを認識していますが、いくつかの問題を抱えていますが、正しいと思われるものは機能していません。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値= falseを キー= LdapPath値= LDAP:// DCは、いくつかの、DC =ドメイン、DC = comの キー=あるSessionTimeout値= 60
しかし、私は唯一例えばEnableLdapという名前のキーから特定の値を選択します
私の理解では、次の方法の両方が正しいだろうということです。
Dictionary<string,string> dict = MyStuff.Configuration.LoadConfiguration();
Console.WriteLine(dict.Single(s => s.Key == "EnableLdap").Value);
:[シーケンスが一致する要素が含まれていないと、InvalidOperationException]そして、私はこれをしようと私は何を取得、私はこの方法を試したときに、私はこれをしようとした場合でも、私はKeyNotFoundException
Dictionary<string,string> dict = MyStuff.Configuration.LoadConfiguration();
Console.WriteLine(dict["EnableLdap"]);
を得る私が取得します
string value = "";
if (dict.TryGetValue("EnableLdap", out value))
{
dict["EnableLdap"] = value;
Console.WriteLine(value);
}
私はここに簡単な何かが欠けていますかなり確信していると答えが手のひらを顔に当てる
になります解決策:
コメントに数回示唆されたように、後続のスペースでキャッチしました。解決策は、私の辞書にそれらを追加するときに単に行の値にトリムを追加することでした。
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"をキーとして持っているのではないと思っていますが、非常に似ているようです。それを繰り返すときに各キーの長さを印刷してみてください...そこに空白や不可視文字のようなものがあるかもしれません。 –
foreachループからの出力を表示するのに役立ちます。あなたは単にスペルミスをしている可能性がありますか? – code11