System.Linq.Enumerable.ToList()的来源在哪里?

Wiz*_*mer 0 c# linq

我想看看是否把一个 .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核心版本在哪里?

mjw*_*lls 7

问题1完整框架版本在哪里?

https://github.com/microsoft/referencesource/blob/master/System.Core/System/Linq/Enumerable.cs#L947

问题2 .net核心版本在哪里?

https://github.com/dotnet/corefx/blob/8750960d3fafa46a9b838c351e995a01fa8b599f/src/System.Linq/src/System/Linq/ToCollection.cs#L23

上面是两个ToList实现的链接(还有其他实现)。

它们涵盖.NET Framework和.NET Core。

如果对象已经是列表,则在我希望将.ToList()放在可能为列表或可能不是列表的IEnumerable上的地方会导致性能下降。

肯定会根据docs创建一个新列表:

从IEnumerable 创建列表。

您也可以通过调用测试这个自己,通过ToListList<int>。然后更改新的List<int>原始文件List<int>没有更改-因此它必须创建了一个新文件List<int>


Ric*_*der 5

https://source.dot.net/是一个很棒的 .dot net (.net core) 源代码在线工具。

源代码ToList<T>()取决于类型。请参阅https://source.dot.net/#q=Linq%20ToList