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>"
...
看来你确实把这个问题过于复杂化了。
您可以仅使用
[]
类的索引器 (Dictionary
) 以及 .ContainsKey()
方法。
如果你使用这样的东西:
string val;
if (myDict.ContainsKey(key))
{
val = myDict[key];
}
else
{
Console.WriteLine("Key Not Present");
return;
}
你应该达到你想要的效果了。
如果您想通过索引器或
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
时,它会执行ToString
的IEnumerable
,即打印它的类型.
请注意,
listaFirme
对于 dictionary
来说并不是一个好名字
如果您没有字典并且想要退回一件物品,那么您可以使用
FirstOrDefault
:
var value = someList.FirstOrDefault(item => /* some predicate */)?.Value;
看来你的用法过于复杂了。在这种情况下,您不需要
Linq
。
只需使用 Dictionary
提供的索引器:listaFirme[matchKey]
。这将返回相关值。如果密钥不存在,则 Dictionary
会抛出 KeyNotFoundException
异常。如果您想检查密钥是否存在,可以使用 ContainsKey()
方法,该方法返回 bool
。
将
toString();
替换为 FirstOrDefault();
当您应用
.Where()
条件时,它将返回 Enumerable
。您必须使用 .ToList()
将其转换为列表,然后您将获得满足您使用的条件的值的列表,或者如果您只想获得第一个,您可以使用 FirstOrDefault();
你也可以这样写
listaFirme.FirstOrDefault(pair => pair.Key == matchKey).Value
由于
FirstOrDefault()
接受谓词,因此您不需要总是使用 .Where
。