通过键从字典中获取单个值

问题描述 投票:0回答:4
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>"
...

c# linq dictionary
4个回答
22
投票

看来你确实把这个问题过于复杂化了。

您可以仅使用

[]
类的索引器 (
Dictionary
) 以及
.ContainsKey()
方法。

如果你使用这样的东西:

string val;
if (myDict.ContainsKey(key))
{
    val = myDict[key];
}
else
{
    Console.WriteLine("Key Not Present");
    return;
}

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


13
投票

如果您想通过索引器或

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;

3
投票

看来你的用法过于复杂了。在这种情况下,您不需要

Linq
。 只需使用
Dictionary
提供的索引器:
listaFirme[matchKey]
。这将返回相关值。如果密钥不存在,则
Dictionary
会抛出
KeyNotFoundException
异常。如果您想检查密钥是否存在,可以使用
ContainsKey()
方法,该方法返回
bool


0
投票

toString();
替换为
FirstOrDefault();

当您应用

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

你也可以这样写

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

由于

FirstOrDefault()
接受谓词,因此您不需要总是使用
.Where

© www.soinside.com 2019 - 2024. All rights reserved.