Я бы порекомендовал вам использовать обычный цикл foreach
для преобразования данных.Вы используете метод, который существует только в реализации List<T>
, но не для массивов.
Использование метода для foreach
действительно ничего не даст вам, если только по какой-то причине вы не хотели выполнять мутацию данных.в цепочке методов.В этом случае вы также можете написать свой собственный метод расширения для IEnumerable<T>
.Однако я бы рекомендовал против этого.
Наличие отдельного цикла foreach
дает читателю понять, что происходит мутация данных.Это также устраняет накладные расходы на вызов делегата для каждой итерации цикла.Он также будет работать независимо от типа коллекции, если это IEnumerable
(не совсем так, вы можете написать свои собственные перечислители и перечислимые объекты, но это другой вопрос).
Если вы ищетечтобы просто выполнять преобразования данных (т.е. проекции и т. п.), затем используйте LINQ.
Также имейте в виду, что с массивом вы получаете копию byte
, а не ссылку.Вы будете изменять только то, что byte
не оригинал.Вот пример с выводом:
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
Array.ForEach(numbers, number => number += 1);
foreach(int number in numbers)
{
Console.WriteLine(number);
}
, который дает вывод:
1 2 3 4 5
Как вы можете видеть,число + = 1 в лямбде не имело никакого эффекта.Фактически, если вы попробуете это в обычном цикле foreach
, вы получите ошибку компилятора.