从C#KeyValuePair中选择值

时间:2015-03-09 18:16:07

标签: c# linq keyvaluepair

代码:

var list = new List<KeyValuePair<int, string[]>>();
list .Add(new KeyValuePair<int, string[]>(1, new string[] { "1", "One"}));
list .Add(new KeyValuePair<int, string[]>(2, new string[] { "2", "Two"}));
list .Add(new KeyValuePair<int, string[]>(3, new string[] { "3", "Three"}));
list .Add(new KeyValuePair<int, string[]>(4, new string[] { "4", "Four"}));

只需选择KeyValuePairs列表中的值并构建数组。我试过这个。

var values = list.Select(v => v.Value.ToList()).ToArray();

期待这样的string[]

{"1", "One", "2", "Two", "3", "Three", "4", "Four"}

但它会返回List<string>[]这样的

{{"1", "One"}, {"2", "Two"}, {"3", "Three"}, {"4", "Four"}}

也试过

var values = list.Select(v => v.Value.ToArray()).ToArray();

但它会返回string[][]。我可以将string[][]转换为string[],但我想直接使用Linq进行此操作。

我需要将预期的数组传递给另一个方法。请帮忙。

谢谢!

2 个答案:

答案 0 :(得分:5)

使用Enumerable.SelectMany之类的:

var values = list.SelectMany(v => v.Value).ToArray();

SelectMany会:

  

将序列的每个元素投影到IEnumerable<T>和   将生成的序列展平为一个序列。

答案 1 :(得分:1)

使用SelectMany

 var values = list.SelectMany(v => v.Value).ToArray();