Оптимизация строки.операции длины в исходном коде C# и системы
Я делаю стандартные функции, которые проверяют длину переменных. Эти функции вызывают другие функции, которые также проверяют длину переменных.
В конце концов, чтобы получить результат, одни и те же проверки повторялись снова и снова, и я не хочу использовать глобальные переменные для сохранения значений нехорошо и потому, что они мне понадобятся для всего.
Я имею в виду, что вызов одних функций другим может привести, например, к этой строке.длина выполняется много раз для одной и той же переменной. Мы не думали о том, как контролировать эти ситуации, которые задерживают конечный результат.
Имея код:
// SAMPLE 1. try { string Text = "123"; for (int index = 0; index < 999; index++) { // Error in Mychar[3]. HResult = -2146233080 ErrorExcp = {"Index outside the matrix limits."} char Mychar = Text[index]; } }catch (System.Exception ErrorExcp){} // SAMPLE 2. try { System.Text.StringBuilder Text_Builder = new System.Text.StringBuilder("123"); Text_Builder[0] = 'A'; // Error. HResult = -2146233086 ErrorExcp = {"The index was out of range. It must be a non-negative value and less than the size of the collection.\r\nNombre del parámetro: index"} Text_Builder[3] = 'A'; }catch (System.Exception ErrorExcp){}
Вопросы:
1.- как система узнает размер строки?
2.- где мы можем найти исходные коды?
3.- я хотел бы знать исходный код IndexOf. Я посмотрел на ... https://referencesource.microsoft.com/" но кажется, что большая часть кода отсутствует, потому что он вызывает dll.
Кто-нибудь знает, где его найти?
Question update
1.- следовать исходному коду IndexOf трудно, и в конце концов вы достигнете точки, где вам придется исследовать дальше. Поэтому я остаюсь таким же, как в начале.
2.- строка строки имеют поле, которое указывает размер длины, так что его не нужно проверять каждый раз через строку. Предположим, что в моих стандартных функциях сравнения строк я выполняю string.ToLower() каждый раз или что-то еще повторяющееся. Если бы в переменных были такие поля, как length, которые также можно было бы расширить пользователем, то при первом выполнении ToLower() мы могли бы пометить его так, чтобы в следующих функциях этот процесс не повторялся.
Это кажется несущественным, но подумайте о том, сколько раз одни и те же задачи повторяются в одних и тех же переменных.
----
Я думал, что строковый тип должен иметь свойства, управляемые автоматически. В этом случае они будут похожи на байтовые поля, используемые с длиной.
Некоторые из этих свойств будут, например:
1.- Длина.
2.- Преобразование: Нет, Верхний Регистр, Нижний Регистр
3.- содержание (флаги): не указано, акцентировано, не акцентировано, контрольные коды, расширенные коды, буквы, цифры ...
Что я уже пробовал:
на всех интернет-сайтах. на всех интернет-сайтах.
Richard MacCutchan
Ни одна из этих вещей не является частью класса string, вероятно, по уважительным причинам. Однако вы можете создать свой собственный класс, содержащий строку, и добавить в него все эти функции.