2011-03-17 73 views
3

我试图将此_valueAdds = List<ValueAddedItemHelper>转换成gridItemsDictionary),其中_valueAdds是键,所有值都是false。但我不确定如何与Lamda做到这一点。这是我得到的下面。我没有在while循环做成功,但想学会的Lamda做数组转换为字典

gridItems = new Dictionary<ValueAddedItemHelper, bool>(); 
gridItems = _valueAdds.Select(k => new { k }).ToArray().ToDictionary(t => t, false); 

回答

5
_valueAdds.ToDictionary(t => t, t => false); 
+0

对不起,我错误地编辑了你的答案。滚回来。 – 2011-03-17 11:11:52

1

您需要提供一个lambda表达式作为第二个参数(或创建委托一些其他的方式,但lambda表达式将是最简单的)。请注意,ToArray的调用不是必需的,也不是您要创建的空字典。只需使用:

gridItems = _valueAdds.Select(k => new { k }) 
         .ToDictionary(t => t, t => false); 

你为什么在这里使用了一个匿名类型,虽然...特别是目前还不清楚给我,那不会ValueAddedItemHelper。你需要投影吗?也许只是:

gridItems = _valueAdds.ToDictionary(t => t, t => false); 
+0

感谢您的解释,我清楚地为自己复杂的事情。 – Domitius 2011-03-17 13:18:40

0

您不需要ToArray()。ToDictionary()。你可以简单地做一个ToDictionary()。而且你不需要第一行。第二行将创建并填充字典。

代码:

gridItems = _valueAdds.ToDictionary(p => p, p => false); 
0

假设_valueAddsIEnumerable<ValueAddedItemHelper>你可以这样做:

gridItems = _valueAdds.ToDictionary(x => x, x => false); 
0

喜欢的东西

var gridItems = _valueAdds.ToDictionary(k=>k,i=>false); 
0

Select(k => new { k })的问题;创建一个名为k的属性的匿名类型。只是:

var gridItems = _valueAdds.ToDictionary(t => t, t => false);