我想看看是否把一个 .ToList()上IEnumerable这可能是也可能不是一个名单将收取一定的性能损失,如果Object已经是一个List。
我的目标是查看源代码。这就是问题隧道的起点。首先我找到SO问题在哪里可以查看LINQ源代码?[关闭]这导致了DOTNet的完整框架版本,但深入研究代码仅显示了一个小的Enumerable类Enumerable。
题
以下扩展方法的源代码在哪里?
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source);
Run Code Online (Sandbox Code Playgroud)
子问题1完整框架版本在哪里?
子问题2 .net核心版本在哪里?
问题1完整框架版本在哪里?
https://github.com/microsoft/referencesource/blob/master/System.Core/System/Linq/Enumerable.cs#L947
问题2 .net核心版本在哪里?
上面是两个ToList实现的链接(还有其他实现)。
它们涵盖.NET Framework和.NET Core。
如果对象已经是列表,则在我希望将.ToList()放在可能为列表或可能不是列表的IEnumerable上的地方会导致性能下降。
肯定会根据docs创建一个新列表:
从IEnumerable 创建列表。
您也可以通过调用测试这个自己,通过ToList上List<int>。然后更改新的List<int>。原始文件List<int>没有更改-因此它必须创建了一个新文件List<int>。
https://source.dot.net/是一个很棒的 .dot net (.net core) 源代码在线工具。
源代码ToList<T>()取决于类型。请参阅https://source.dot.net/#q=Linq%20ToList