【问题标题】:Dictionary<string, double>get key from value (error)Dictionary<string, double>从值中获取键(错误)
【发布时间】:2018-04-27 21:57:00
【问题描述】:

我有一本字典 (Dictionary),我想从 (value) 中获取键值:

假设 dic 包含:

"som": 12.2345
"roy": 2.677
"toy": 1.67445666777

我想通过搜索大约 2.677 得到 roy 密钥

我试过了:

var keys = from entry in dic
                           where entry.Value == 2.677
                           select entry.Key;

还有:

var myKey =dic.FirstOrDefault(x => x.Value.Contains(2.677)).Key;

在每种情况下,我都会遇到相同的错误: 错误:“double”不包含“Value”的定义,并且找不到接受“double”类型的第一个参数的扩展方法“Value”(您是否缺少 using 指令或程序集引用?)

任何帮助将不胜感激

【问题讨论】:

  • 给我们看定义dic的代码,我怀疑那里有问题。
  • 向我们展示你在哪里实例化字典的代码。第二个应该可以工作,只是省略了.Contains 部分。但是知道@vnbrs 的答案对您没有帮助,并且从错误来看,我几乎可以肯定dic 不是Dictionary&lt;string, double&gt; 而是IEnumerable&lt;double&gt;
  • 我有一个列表和字典,所以我的错误是我使用了列表的名称而不是字典,所以它现在可以工作了 :)))))))

标签: c# dictionary contains


【解决方案1】:

您不需要Contains。试试这个:

var myKey = dic.FirstOrDefault(item => item.Value == 2.677).Key;

请注意,FirstOrDefault 方法将返回 exact first 键或 null 如果找不到与表达式匹配的任何内容。许多键可以具有相同的Value 属性。

【讨论】:

  • 字典
  • @vnbrs 我刚刚删除了我的评论,我弄错了。 OP 的 Dictionary 实例化有问题。他们得到的错误:“'double'不包含'Value'的定义”表明dic不是Dictionary&lt;string, double&gt;
  • 请在问题中包含字典定义和实例化。 @dany
  • @vnbrs 非常感谢,我的错误是因为我使用列表而不是字典,它们的名称几乎相同,只是不同
  • @dany 也许你应该把它当作一个教训,给你的变量更有意义的名字......
【解决方案2】:

你可以试试这个:

string key = dic.FirstOrDefault(x => x.Value == 2.677)?.Key;

请注意,FirstOrDefault() 可以在没有符合您的条件的情况下返回 null,因此请使用 null 条件运算符 (?.) 确保不引发 null 引用异常。这只是意味着如果找不到匹配的值,则 key 将为 null。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多