Какие задачи решает структура ArraySegment?
С виду, похоже, что копирует кусок массива в эту структуру и позволяет ее изменять отдельно от основного массива и не портя исходного массива.
Разве не тоже самое можно получить созданием List ?
Я кажется понял его основной смысл:
Можно исходный массив обернуть в ArraySegment
'ы и передать его в потоки и в итоге потоки будут работать с сегментом не подозревая, что это кусок массива(так как индексация сегмента будет с 0 если не использовать смещение).
Поправьте, если я не прав.
Когда требуется работать не со всем массивом данных, а лишь с его частью, нужно передать в метод три параметра: ссылку на сам массив, индекс начала, количество элементов.
void Foo(int[] array, int startIndex, int count)
Если при этом нужны и другие параметры, то сигнатура метода становится длинной и малопонятной:
void Foo(int[] array, int startIndex, int count, SomeTypeA param1, SomeTypeB param2)
Есть распространённый способ рефакторинга: замена параметров объектом (структурой). Я так понимаю, что ArraySegment
как раз и является таким объектом, заранее введённым разработчиками фреймворка.
void Foo(ArraySegment<int> segment)
void Foo(ArraySegment<int> segment, SomeTypeA param1, SomeTypeB param2)
Такая сигнатура несколько проще.
Конечно, можно и для других параметров ввести свой объект (но его нужно предварительно написать самим):
void Foo(ArraySegment<int> segment, SomeObject obj)
То, что массивы ныне совсем мало используются по сравнению с другими коллекциями, совсем другой вопрос.
Тут смотреть не пробовали?
Структура ArraySegment - Определяет границы фрагмента одномерного массива. И методы описаны и весь букет.
Вот простой пример использования:
var array = new byte[] { 5, 8, 9, 20, 70, 44, 2, 4 };
array.Dump();
var segment = new ArraySegment<byte>(array, 2, 3);
segment.Dump(); // output: 9, 20, 70
segment.Reverse().Dump(); // output 70, 20, 9
segment.Any(s => s == 99).Dump(); // output false
segment.First().Dump(); // output 9
array.Dump(); // no change
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть консольное приложение, в котором нужно копировать файлы по локальной сети как с аутентификацией так и безЗнаю, что без аутентификации...