List <T>动态连接

s.k*_*aul 2 c# dictionary concatenation generic-list

我想concate List<>如下-

 List<Student> finalList = new List<Student>();
 var sortedDict = dictOfList.OrderBy(k => k.Key);
 foreach (KeyValuePair<int, List<Student>> entry in sortedDict) {          
     List<Student> ListFromDict = (List<Student>)entry.Value;
     finalList.Concat(ListFromDict);
 }
Run Code Online (Sandbox Code Playgroud)

但是没有连接发生.finalList保持为空.有帮助吗?

Pet*_*r B 7

调用Concat不会修改原始列表,而是返回一个新列表 - 或者完全准确:它返回一个IEnumerable<string>将产生连接的两个列表的内容,而不修改它们中的任何一个.

您可能想要使用AddRange哪个符合您的要求:

List<Student> ListFromDict = (List<Student>)entry.Value;
finalList.AddRange(ListFromDict);
Run Code Online (Sandbox Code Playgroud)

甚至更短(在一行代码中):

finalList.AddRange((List<Student>)entry.Value);
Run Code Online (Sandbox Code Playgroud)


因为entry.Value已经是类型List<Student>,你可以使用这个:

finalList.AddRange(entry.Value);
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 7

其他答案已经解释了为什么Concat没有帮助你 - 但他们都保持原来的循环.没有必要 - LINQ让你满意:

List<Student> finalList = dictOfList.OrderBy(k => k.Key)
                                    .SelectMany(pair => pair.Value)
                                    .ToList();
Run Code Online (Sandbox Code Playgroud)

要清楚,这将替换整个现有代码,而不仅仅是循环体.

更简单:)每当你发现自己使用一个foreach除了构建另一个集合之外什么都不做的循环时,值得看看你是否可以使用LINQ来消除这个循环.