Одна проблема с массивами состоит в том, что негде документировать методы экземпляров, которые доступны только для "векторов" . «Вектор» - это одномерный массив с базой 0, поэтому все, что в C # можно представить как T[]
, является вектором, а, например, T[,]
- нет.
Это означает, что не каждый экземпляр Array
должен иметь метод - и даже если бы он имел, как бы вы представляли T
? Каждый тип массива является отдельным, и в .NET нет универсального типа, который является базовым классом для всех массивов. Все, что у нас есть, это Array
.
Итак, учитывая, что мы должны ввести параметр типа где-то в системе типов, и учитывая, что мы также ограничиваем его «векторными» типами, статический метод кажется подходящим обходным путем.
Обратите внимание, что это не в случае с List<T>
, где у нас уже есть параметр типа, поэтому мы можем создать простой метод экземпляра.
Также стоит подумать, когда использование Array.ForEach
на самом деле заканчивается более чистым кодом, чем просто использование цикла foreach
. Я бы обычно использовал его, только когда у меня уже есть делегат для выполнения на каждом элементе. В противном случае языковая конструкция выглядит чище, и она, безусловно, более гибкая в своей способности возвращаться или выходить из цикла без исключения.