|
Модератор
|
|||||||
Array.IndexOf(Array, Object, Int32) не получаю исключение, если startIndex = array.Length01.07.2025, 23:12. Показов 1320. Ответов 7
Может гоню уже на старости лет...
Array.IndexOf(Array, Object, Int32)
IndexOf должен выдать исключение.Реальность: работает без исключения и возвращает -1.
0
|
|||||||
| 01.07.2025, 23:12 | |
|
Ответы с готовыми решениями:
7
Метод Graphics.DrawLine(Int32, Int32, Int32, Int32) Узнать координаты всех точек данной прямой Значение StartIndex не может быть меньше нуля. Имя параметра: startIndex. Смена раскладки с английской на русскую
|
|
Администратор
|
|
| 02.07.2025, 00:24 | |
Сообщение было отмечено Элд Хасп как решение
Решение
Элд Хасп, startIndex может быть равен длине массива т.к. иначе мы бы не смогли искать в пустом массиве.
1
|
|
|
14297 / 9382 / 1353
Регистрация: 21.01.2016
Сообщений: 35,371
|
||
| 02.07.2025, 02:46 | ||
Сообщение было отмечено Элд Хасп как решение
Решение
Элд Хасп, из этой же самой документации по ссылке (см. комментарии под примером кода):
1
|
||
|
Модератор
|
|||
| 02.07.2025, 11:17 [ТС] | |||
|
Я просто сделал (давно уже) метод расширения IndexOf(this IList list, value, startIndex, count) и несколько его перегрузок.Там реализовал, как описал в начале. А недавно выяснилось, что поведение моего метода отличается от дефолтного. Это меня и удивило. Искать в пустом массиве перегрузкой IndexOf(this IList list, predicate, startIndex, count), как я думал, в принципе не верно и такая перегрузка всегда должна давать исключение.А перегрузка IndexOf(this IList list, predicate) пустой массив у меня нормально "переваривала".Разъяснение в документации теперь понятно. Свой метод, конечно переделаю под аналогичное поведение, но некое ощущение какой-то неправильности, несуразности осталось
0
|
|||
|
|
|||||||
| 02.07.2025, 17:20 | |||||||
index = array.IndexOf(startIndex, predicate). Понятное дело что лепить проверки на каждый чих не удобно и не логично, но как по мне также не логичным в принципе пытаться искать за пределами массива и рассчитывать на какой-то там результат. Поэтому если есть основания полагать что startIndex вылетит за диапазон, то это задача в первую очередь для верхнего уровня кода.Как я понял, такое "разночтение" что для startIndex == array.Length и startIndex > array.Length добавили чтобы было проще писать всякие алгоритмы, где исходный массив делят на подмассивы, и приходится очень много где лепить проверки для пустых массивов (как ранее упомянул OwenGlendower). Т.е. авторы поступили в лучших традициях MS, поставив во главу практичность, а не "правильность".
1
|
|||||||
|
Модератор
|
||
| 02.07.2025, 19:13 [ТС] | ||
|
Для массива { 1, 2, 3}Проверка пустого массива в полной перегрузке это IndexOf(2, 1, 0). Здесь и не должно быть исключения.А вот почему при выходе за границы диапазона IndexOf(2, 3, 0) нет исключения.... в мою логику не укладывается.
0
|
||
|
|
|||||||||||
| 02.07.2025, 20:34 | |||||||||||
|
Ну, лично я решаю 146% своих задач с помощью Linq, так что быстро классный пример для этого не подгоню. Всё что приходит на ум, это такой пример со string (не совсем наш метод, но логика поведения ровно такая же)
-------------------------------------------------- Чуть абстрагируемся: - мы блоками грузим данные в массив-буфер - мы ищем в массиве данные поочерёдно -- сначала А, потом В, и только потом С. - при нахождении каждого элемента нам нужно зафиксировать его позицию и сделать +1 для следующего поиска. - этот +1 сразу может выходить за текущий буфер. - при этом мы на 146% уверенны что прогрузим следующий блок и можем стартовать поиск в нём. - опционально следующий блок может быть Length = 0, что означает что просто нужно брать следующий Замечу что выход startIndex > length скорее всего будет означать что мы где-то налажали в алгоритме в принципе. Не уверен на 100% в этом утверждении, но внутренняя чуйка подсказывает что это так.
0
|
|||||||||||
|
Модератор
|
|
| 02.07.2025, 21:34 [ТС] | |
|
Wolfdp, Ну, это скорее о необходимости вообще исключений в этом методе.
Убери все исключения и ваш метод так же будет работать. То есть для примера нужен код выполняющий условия: 1) Исключение при startIndex == аrray.Length - мешают; 2) Исключение при startIndex > аrray.Length - помогают. Добавлено через 1 минуту Такие задачи исключительно реки, я думаю. Это одна из причин почему я натолкнулся на это случайно после нескольких лет использования своего метода.
0
|
|
| 02.07.2025, 21:34 | |
|
Помогаю со студенческими работами здесь
8
Значения startIndex указателя и длины не указывают на действительную строку Ошибка "startIndex должен быть меньше, чем длина строки." Ошибка "startIndex должен быть меньше, чем длина строки." Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|