【发布时间】:2016-11-18 09:26:55
【问题描述】:
我正在研究一些需要将输入集合转换为数组的扩展方法。 我想节省内存,所以我只想在绝对必要时创建输入的副本。
我必须这样做吗:
public static ICollection<TSource> ExtMethod<TSource>(this ICollection<TSource> source, Func<TSource, int> predicate)
{
TSource[] converted;
if (source is TSource[])
{
converted = source as TSource[];
}
else {
converted = source.ToArray();
}
}
或者 toArray 是否在幕后进行检查,如果我这样做,我会得到完全相同的效果:
public static ICollection<TSource> ExtMethod<TSource>(this ICollection<TSource> source, Func<TSource, int> predicate)
{
TSource[] converted = source.ToArray();
}
【问题讨论】:
-
真的不容易查吗?
-
这里是源代码:referencesource.microsoft.com/#System.Core/System/Linq/… 点击
Buffer和ToArray看看在构造函数和最终的 ToArray 中发生了什么,看看那里发生了什么。
标签: c# arrays casting extension-methods