Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Зачем тут Array.Clear?

17.03.2019, 18:03. Показов 1726. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
        public int Length {
            get {
                Contract.Ensures(Contract.Result<int>() >= 0);
                return m_length;
            }
            set {
                if (value < 0) {
                    throw new ArgumentOutOfRangeException("value", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
                }
                Contract.EndContractBlock();
 
                int newints = GetArrayLength(value, BitsPerInt32);
                if (newints > m_array.Length || newints + _ShrinkThreshold < m_array.Length) {
                    // grow or shrink (if wasting more than _ShrinkThreshold ints)
                    int[] newarray = new int[newints];
                    Array.Copy(m_array, newarray, newints > m_array.Length ? m_array.Length : newints);
                    m_array = newarray;
                }
                
                if (value > m_length) {
                    // clear high bit values in the last int
                    int last = GetArrayLength(m_length, BitsPerInt32) - 1;
                    int bits = m_length % 32;
                    if (bits > 0) {
                        m_array[last] &= (1 << bits) - 1;
                    }
                    
                    // clear remaining int values
                    Array.Clear(m_array, last + 1, newints - last - 1);
                }
                
                m_length = value;
                _version++;
            }
        }
1) m_array[last] &= (1 << bits) - 1; - почему просто ноль бы не присвоить последнему int'у?
2) Зачем Array.Clear? Почему без него нельзя?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2019, 18:03
Ответы с готовыми решениями:

Array.Clear() - не работает
Не работает метод Array.Clear() хочу очистиь массив типа Char .На что intellisence говорит Ошибка 1 Доступ к члену...

Array.Clear() - каким образом удаляется диапазон, если массив по ссылке не передается?
Прочитал про этот метод и возник вопрос - каким образом он удаляет диапазон, если массив по ссылке не передается? MSDN: ...

Почему Array.Clear(_array, 0, _tail), а не _tail + 1?
Очередь: // Removes all Objects from the queue. /// &lt;include file='doc\Queue.uex' path='docs/doc/*' /&gt; public...

7
 Аватар для JustinTime
964 / 582 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
17.03.2019, 19:35
Соколиный глаз,
1.
0b1 << 8 = 0b100000000
0b100000000 - 1 = 0b011111111

Добавлено через 11 минут
Соколиный глаз, Вы ищете баги в Net Framework? :-)
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.03.2019, 01:29  [ТС]
uzhsoft, нет, я пытаюсь понять почему такой код, а не иной.

Добавлено через 3 минуты
Чтобы баги искать надо сначала хорошо в самом фреймворке разобраться.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.03.2019, 15:03  [ТС]
Так что? Я все же оставлю вопрос открытым.
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,688
Записей в блоге: 2
18.03.2019, 15:32
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
2) Зачем Array.Clear? Почему без него нельзя?
Не уверен, не проверял, изучал только визуально. Есть предположение:
Метод Length, как вы надеюсь поняли, меняет размер массива. В некоторых случаях нельзя просто взять и объявить новый размер.
- Если он стал меньше, то просто граница уменьшается и всё.
- А если увеличился, то новые данные должны быть корректны.
- Array.Clear - нетипизированный. Значит "забивает" int нолями, string - null.ами и т.п.
0
 Аватар для Fleder
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
18.03.2019, 16:57
Лучший ответ Сообщение было отмечено Соколиный глаз как решение

Решение

Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Зачем Array.Clear? Почему без него нельзя?
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Так что? Я все же оставлю вопрос открытым.
Предположим, что я создал BitArray на 1000 элементов.
При этом внутри класса будет создан массив типа int на 1000 / sizeof(int) = 250 элементов.
Все они будут заполнены нулями, так и должно быть.
Дальше я при помощи метода Set выставляю каждый из 1000 бит в единицу.
Потом уменьшаю размер при помощи свойства Length до размера 500.
Вот эта строка:
C#
1
if (newints > m_array.Length || newints + _ShrinkThreshold < m_array.Length)
благодаря константе _ShrinkThreshold = 256 не позволит перераспределить внутренний массив,
будет просто изменено поле m_length на новое значение 500.
А теперь я снова меняю размер на 1000.
Так как внутренний массив всё тот же самый, то без Array.Clear() нам стали бы доступны старые данные,
те самые старые единицы, а так не должно быть.
1
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
18.03.2019, 17:01  [ТС]
Fleder, спасибо!
0
HF
18.03.2019, 21:47

Не по теме:

Меня мучает сомнение что именно это я и сказал. :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2019, 21:47
Помогаю со студенческими работами здесь

Зачем тут создается указатель p? И что за "странная" операция *p = *p = 1?
Здравствуйте. Ребят, очень нуждаюсь в помощи, помогите понять. Попался мне на мсдн код, в реализации которого вычисляются 20 чисел...

Как устроена внутренняя реализация Array.Copy и Array.CopyTo
Народ плис, я новичок, но нужна срочная консультация: Кто знает как устроена внутренняя реализация Array.Copy и Array.CopyTo? Есть...

Что означает эта запись array = array.Select((x) => x == max ? sum : x).ToArray()
вот пример class test { static void Main(string args) { int array = { 5, -9, 8, 6, -14...

Конвертирование HEX array в BYTE array
Собственно сабж. Накопипастил. И слепил это. Скажите а можно лаконичнее? //Художественный изгиб преобразования HEX в Byte...

unsafe byte array to struct array
Есть массив байт размером N. Есть структура, внутри которой enum поле размером в 1 байт. Как с помощью unsafe кода преобразовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru