【问题标题】:Get single value from dictionary by key按键从字典中获取单个值
【发布时间】:2017-05-05 13:58:23
【问题描述】:
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&lt;String&gt;"...

【问题讨论】:

  • Select 返回一个 Ienumerable。或许您应该在 Select 调用中添加 FirstOrDefault
  • 既然你有字典,为什么不使用字典专门提供的方法,例如索引器还是TryGetValue?您当前的方法完全失去了使用字典的所有性能优势......

标签: c# linq dictionary


【解决方案1】:

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

您可以将Dictionary 类的索引器([]) 与.ContainsKey() 方法一起使用。

如果你使用这样的东西:

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

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

【讨论】:

  • 不要使用 ContainsKey[] 对。您将字典必须执行的查找加倍。请改用TryGetValue
  • 没错,但如果您的字典不是很大,为了简单起见,我更喜欢使用它。
【解决方案2】:

如果您想通过索引器或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&lt;T&gt; 所以当在它上面执行 ToString 时它会执行 IEnumerableToString 这是打印这是类型。

请注意,listaFirme 不是 dictionary 的好名字


如果您没有字典并想返回一项,那么您可以使用FirstOrDefault

var value = someList.FirstOrDefault(item => /* some predicate */)?.Value;

【讨论】:

    【解决方案3】:

    看来您的用法过于复杂了。在这种情况下,您不需要Linq。 只需使用Dictionary 提供的索引器:listaFirme[matchKey]。这将返回相关值。如果密钥不存在,Dictionary 将引发 KeyNotFoundException 异常。如果要检查密钥是否存在,可以使用返回 boolContainsKey() 方法。

    【讨论】:

      【解决方案4】:

      toString(); 替换为FirstOrDefault();

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

      你也可以这样写

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

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

      【讨论】:

      • 我希望现在更好。
      • 这是最好的、最简单的、一站式解决方案
      猜你喜欢
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      相关资源
      最近更新 更多