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保持为空.有帮助吗?
调用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)
其他答案已经解释了为什么Concat没有帮助你 - 但他们都保持原来的循环.没有必要 - LINQ让你满意:
List<Student> finalList = dictOfList.OrderBy(k => k.Key)
.SelectMany(pair => pair.Value)
.ToList();
Run Code Online (Sandbox Code Playgroud)
要清楚,这将替换整个现有代码,而不仅仅是循环体.
更简单:)每当你发现自己使用一个foreach除了构建另一个集合之外什么都不做的循环时,值得看看你是否可以使用LINQ来消除这个循环.