Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public static class LinqExtensions
{
public static TResult[] SelectToArray<T, TResult>(this ICollection<T> source, Func<T, TResult> func)
{
if (source == null)
throw new ArgumentNullException("source");
TResult[] result = new TResult[source.Count];
int i = 0;
foreach (var value in source)
{
result[i++] = func(value);
}
return result;
}
}
Мне кажется это тут лишнее, так как буквально сегодня проверял, что будет если из пустой коллекции вызвать ToArray — возвращается пустой массив, и это как мне кажется логично.
array[i] = source[i];List<User> users = GetUsers();
string[] array = users.Select(u => u.Name).ToArray(users.Count);
оба эти метода очень неэффективны, если они не знают количество элементов в последовательности (что почти всегда происходит, когда вы используете их в Linq-запросе).
ToArray делается поверх IQueryable, чтобы добиться материализации, или просто поверх ленивого генератора/энумератора.Однако, в них есть кое-что беспокоящее меня: оба эти метода очень неэффективны, если они не знают количество элементов в последовательности
Оптимизация методов ToArray и ToList путём предоставления количества элементов