【问题标题】:Use list entries as keys for dictionary使用列表条目作为字典的键
【发布时间】:2013-01-26 04:24:54
【问题描述】:

我有一个

List<string> myList = new List<string>();

告诉我应该在一些输入数据中找到的所有内容。我想将其转换为

Dictionary<string, bool> myDict = Dictionary<string, bool>();

其中字典键与列表条目相同,并且所有值都是假的。然后,我将遍历数据,并在找到元素时更新字典值。

这看起来很简单,但是

Dictionary<string, bool> myDict = myList.ToDictionary<string, bool>(x => false);

由于错误而无法工作:

无法将类型 Dictionary&lt;bool, string&gt; 隐式转换为 Dictionary&lt;string, bool&gt;

【问题讨论】:

  • "不起作用" => 虽然专家很清楚问题出在哪里,但问题肯定包括实际错误。
  • siride - 确实,谢谢。
  • 反对票可能是因为没有进一步信息的情况下“它不起作用”这个短语。你已经解决了这个问题,但人们可能没有回来删除他们的反对票。

标签: c# .net linq list dictionary


【解决方案1】:

你想做这样的事情:

var dict = myList.ToDictionary(s => s, s => false);

您使用的重载将创建一个Dictionary&lt;bool, string&gt;,键为布尔值,并为列表中的字符串值赋值。 (并且将 bool 作为键意味着您只能有两个条目;)

此外,您很少需要为方法显式指定类型参数(如 &lt;string, bool&gt;),因为它们可以被推断出来,并且您可以将 var 用于变量,就像上面所做的那样。

【讨论】:

    【解决方案2】:

    您可以使用Enumerable.ToDictionary 并指定 false 作为值。

    myDict  = myList.ToDictionary(r=> r, r=> false);
    

    你正在使用的代码会给你Dictionary&lt;bool,string&gt;,如果你查看智能感知然后:

    因此出现错误:

    不能隐式转换类型 'System.Collections.Generic.Dictionary' 到 'System.Collections.Generic.Dictionary'

    【讨论】:

    • 请记下实际问题是什么,而不仅仅是转储代码。
    • @siride,“不起作用”是什么意思? - 这是答案中应该WORK的代码
    • 我已经解释过了。我不认为仅仅转储正确的代码本身就是一个好的答案。 manojlds 上面的回答实际上除了给出正确的代码外,还解释了问题。
    • @siride 它可能不是 100% 有用.. 但它不是不正确的。为什么要为此投反对票?
    • @SimonWhitehead:否决票不仅仅是关于它在技术上是否正确。这是关于质量的。如果它只是转储代码和链接,我认为这不是一个高质量的答案。这就是我们希望这个网站填充的内容吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多