按键从字典中获取单个值

时间:2017-05-05 13:58:23

标签: c# linq dictionary

var listaFirme = new Dictionary<string, string>
{
    { "foo", "bar" }
};

var matchKey = "foo";

return listaFirme.Where(pair => pair.Key == matchKey).Select(pair => pair.Value).ToString();

我知道密钥是唯一的,所以我想从我的字典中返回一个值。在这种情况下,它不起作用,因为它返回字符串"System.IEnumerable<String>" ...

4 个答案:

答案 0 :(得分:7)

如果您想通过索引器或TryGetValue从字典访问中检索密钥的值:

var value = listaFirme[matchKey];

//If you don't know for sure that dictionary contains key
string value;
if(a.TryGetValue(matchKey, out value))
{
    /* Code here */
}

至于为什么你得到了你做的结果:WhereSelect的Linq操作返回IEnumerable<T>所以当对它ToString执行时它会执行{{1} ToString的{​​}打印它的类型。

请注意IEnumerable不是listaFirme

的好名字

如果您没有字典并且想要返回一个项目,那么您将使用dictionary

FirstOrDefault

答案 1 :(得分:5)

看起来您似乎过度复杂化了这个问题。

您可以使用$(".modal-body").scroll(function(){ var height = $(".modal-body").scrollTop(); var htOfDiv = $(".modal-body").prop('scrollHeight')-$(".modal-body").height()-30 if(height >= htOfDiv) { $(".modalClose").attr("disabled",false) } }); 类的索引器([])和Dictionary方法。

如果你使用这样的东西:

.ContainsKey()

你应该达到你想要的效果。

答案 2 :(得分:2)

您的使用情况似乎过于复杂。在这种情况下,您不需要Linq。 只需使用Dictionary提供的索引器:listaFirme[matchKey]即可。这将返回相关值。如果密钥不存在,Dictionary会抛出KeyNotFoundException异常。如果要检查密钥是否存在,可以使用返回ContainsKey()的{​​{1}}方法。

答案 3 :(得分:-1)

toString();替换为FirstOrDefault();

当您应用.Where()条件时,它将返回Enumerable。您必须使用.ToList()将其转换为列表,然后您将获得符合您使用条件的值列表,或者如果您只想获得第一个可以使用FirstOrDefault();

您也可以像这样写

listaFirme.FirstOrDefault(pair => pair.Key == matchKey).Value

由于FirstOrDefault()接受谓词,因此您不需要始终使用.Where