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>"
...
答案 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 */
}
至于为什么你得到了你做的结果:Where
和Select
的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
。