使用列表条目作为字典的键

时间:2013-02-11 04:24:13

标签: c# .net linq list dictionary

我有一个

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

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

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

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

这看似简单,但

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

无效:

  

无法隐式将Dictionary<bool, string>类型转换为Dictionary<string, bool>

2 个答案:

答案 0 :(得分:7)

你想做这样的事情:

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

您正在使用的重载将创建Dictionary<bool, string>,其中键为bool并从列表中为字符串值值。 (并且将bool作为键意味着,您只能有两个条目;)

此外,您很少需要为expcitly方法指定类型参数,例如<string, bool>,因为它们可以被推断,并且您可以将var用于变量,如上所述。

答案 1 :(得分:5)

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

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

如果您查看intellisense,那么您使用的代码将为您Dictionary<bool,string>提供:

enter image description here

因而错误:

  

无法隐式转换类型   'System.Collections.Generic.Dictionary'来   'System.Collections.Generic.Dictionary'