2
我的工作,我需要輸入集合轉換成數組數擴展方法。 我想節省內存,所以我只想創建一個輸入副本,如果它是絕對必要的。在作爲數組的ICollection上調用.toArray()是否會返回引用或副本?
我必須做的:
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();
}
}
或根本指定者做引擎蓋下的檢查,我有完全一樣的效果,如果我做的:
public static ICollection<TSource> ExtMethod<TSource>(this ICollection<TSource> source, Func<TSource, int> predicate)
{
TSource[] converted = source.ToArray();
}
是不是真的很容易檢查? – Itay
這裏的源:https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,783a052330e7d48d,references點擊'Buffer'和'ToArray'看到在構造函數中發生了什麼,並在最後的ToArray來看看發生了什麼。 –