Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемОльга Ванслова
1 Типы, допускающие неопределенное значение Работа со строками Обработка исключений Лекция 9
2 Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений
3 Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений
4 Типы с неопределенным значением – расширение типов - значений (ValueType) неопределенным значением null Структура Nullable struct Nullable where T : struct, new() Свойства HasValue bool HasValue { get; } – определено ли значение или объект - null Value T Value {get; } - значение Синтаксис объявления Nullable Nullable value_type? value_type?- сокращенный вариант Примеры : ? int? nj = 5, nj = null; Nullable f = null; ? DateTime? ndt = GetNullableDate(), ndt2 = null;
5 Неопределенные значения в базах данных * Трехзначная логика bool? Возможность неопределенного возвращаемого значения Расширение типов - значений неопределенным значением
6 Существует неявное преобразование из value_type в value_type? Обратное преобразование - только явное : int? nj; int j = (int)nj; Свойства HasValue – показывающее определено ли значение и Value - значение int i; int? ni = 5; if (ni.HasValue) i = ni.Value; Значение по умолчанию - null Можно получать доступ ко всем членам объекта типа DateTime? d = new DateTime(); d.Value.AddDays(4);
7 Можно выполнять обычные операции ( переопределены ) int? + int? => int? Если одно из значений не определено (null), то и результат не определен Если оба определены, то результат – сумма этих значений Можно сравнивать с null if (ni == null) ni = 5;
8 object1 ?? object2 Если object1 равен null, то результатом этого выражения будет object2, иначе object1 Использование Присваивание значения по умолчанию, если не определен Применимо к ссылочным и Nullabe типам Примеры : int? a; int i = a ?? 5; Если a == null, то i = 5, иначе i = a.Value
9 Nullable Types
10 Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений
11 String – ссылочный тип Функционирует как тип - значение Строка неизменяема Сравнение строк = == ==, != Сравнение содержимого ( посимвольно с учетом регистра ), а не ссылок на объект Конкатенация строк + или использование статического метода Concat() string s = s1 + еще одна строчка + s2; String s += добавленная строчка – создает новый экземпляр типа string Свойства: Свойство Length – возвращает длину строки ( только чтение ) Индексатор [ [[ [ ] – возвращает указанный символ в строке ( только на чтение ) char c = myString[5]; Статическое поле E EE Empty – представляет пустую строку string s = string.Empty;
12 Compare() Статический метод Compare() – сравнение строк, возможно с учетом культуры и регистра string result = string.Compare(string1, string2, new CultureInfo("en-US"), CompareOptions.IgnoreCase); IndexOf()LastIndexOf() Методы IndexOf(), LastIndexOf() – возвращают позицию символа или подстроки Contains() Метод Contains() – возвращает true, если строка содержит подстроку Format() Статический метод Format() – создание форматированной строки string result = String.Format( Температура {0:d}:\n в {1,11}: {2} градусов ", date, time, temp); Insert() Метод Insert() – возвращает новую строку, в которой указанная подстрока вставлена в указанную позицию string result = s.Insert(2, вставляемая подстрока ); Remove(), Replace() Методы Remove(), Replace() – возвращают новые строки, в которых удалена или замена подстрока Split() Метод Split() – разбивает строку на несколько строк по определенному символу Trim() Метод Trim() – удаляет все вхождения определенного набора символов сначала и с конца строки ToUpper(), ToLower() Методы ToUpper(), ToLower() – преобразование строки в верхний, нижний регистры ( возвращают новые строки ) Join() Метод Join() – объединяет коллекцию в строку использую разделитель между элементами int[] values = {5, 4189, 11434,.366 }; Console.WriteLine(string.Join(;", values)); IsNullOrEmpty()IsNullOrWhiteSpace() Статические методы IsNullOrEmpty(), IsNullOrWhiteSpace() – проверяют строку на пустоту ВНИМАНИЕ !!! Методы возвращают новый экземпляр string и не меняют текущую строку
13 Класс предназначен для работы с часто изменяющимися строковыми данными Представляет изменяемую строку символов Расположен пространстве имен System.Text Методы : Append() Append() – добавляет строковое представление типа ( подстроку ) в конец ( перегружен для различных типов данных ) AppendFormat() AppendFormat() – добавляет форматированную строку AppendLine() AppendLine() – добавляет строку и символ перевода строки Insert() Insert() – вставляет строковое представление типа ( подстроку ) в указанное место ( перегружен для различных типов данных ) Replace() Replace() – заменяет символы или подстроки на новые Clear() Clear() – очищает содержимое ToString() ToString() – возвращает содержащуюся строку В отличии от string меняет сам объект, а не возвращает новый при изменении данных
14 Применяется для форматирования вывода строки Console.Write(), Console.WriteLine(), string.Format(), stringBuilder.AppendFormat() Первый параметр – строка - шаблон Метки - заполнители {0}, {1}, {2} … Вместо меток подставляются параметры метода, следующие за строкой Следующие параметры нумеруются с 0 Метки - заполнители {0}, {1}, {2} могут идти в произвольном порядке и повторятся сколько угодно раз При недостаточности параметров будет вызвано исключение Console.Write(x = {0}, y = {2}, z = {1}, x ={0}, dx, dz, dy); Форматирование числовых данных C, c – денежный формат D, d – числовой формат ( с минимальный кол - вом цифр ) E, e – экспоненциальный формат числа F, f – формат числа с фиксированной точкой X, x – шестнадцатеричный формат P, p – представление в процентах G, g – общий формат string s = string.Format("{0:C}", value);
15 \ Управляющие символы начинаются с \ \n– перевод строки ( для Windows) \t– символ табуляция \r– возврат каретки \a– звуковой сигнал \\– символ \ \*– символ * \– символ string s = Дословные строки Отключение управляющих символов Сохраняет пробелы, символы перевода строк и т. д. string s string s на две строки ( да еще и с пробелами )
16 Работа со строками
17 Позволяет осуществлять поиск, замену, проверку, разбор строки, используя регулярные выражения Пространство имен System.Text.RegularExpressions Позволяет работать как с статическими методами, так и создать экземпляр класса для проведения множества однотипных операций, используя один и тот же паттерн Методы ( все методы экземпляра имеют и соответствующий статический вариант ): IsMatch() IsMatch() – проверяет строку на соответствие регулярному выражению ( статический метод и метод экземпляра ) Match() Match() – возвращает первое вхождение регулярного выражения в строку ( статический метод и метод экземпляра ) Matchs() Matchs() – возвращает коллекцию всех вхождений регулярного выражения в строку ( статический метод и метод экземпляра ) Replace() Replace() – заменяет все вхождения регулярного выражения на новую подстроку Split() Split() – разделяет строку на подстроки по позициям совпадения с регулярным выражениям ( найденная строка выкидывается ). Статический метод и метод экземпляра Примеры : Regex r = new bool ok = r.IsMatch(" "); bool validTel = string s = Regex.Replace(inputString, ); // Удаление недопустимых символов
19 Работа с регулярными выражениями
20 Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений
21 Возвращаемое значение Не всегда возможно ( конструкторы ) Не сразу проявляется Непонятно, что конкретно произошло Усложняет код Глобальная переменная Не проходит в многопоточной среде Вызов определенной функции или завершение программы Не проходит, если библиотеки независимы Обработка исключений
22 Ошибке ставится в соответствие некоторый объект – исключение (exception) System.Exception Объект - исключение должен иметь тип, который является потомком System.Exception При возникновении ошибочной ситуации генерируется ( выбрасывается ) исключение if(j 3) throw throw new IndexOutOfRangeException(); Прерывается обычный ход выполнения операторов Если нет обработчика исключения, то приложение будет аварийно завешено.
23 Блок обработки исключений имеет следующий вид :try { // Код, требующий корректного восстановления или очистки ресурсов } [catch [catch [(exception_type1 [name_1])] { // Код восстановления, после возникновения исключения exception_type1 } … catch … catch(exception_typeN [name_N]) { // Код восстановления, после возникновения исключения exception_typeN ] } ] [finally { // Код очисти ресурсов, после операций в блоке try // Этот код выполняется всегда, вне зависимости от наличия исключения ] } ] Блок try – обязательный Блоки catch и finally могут отсутствовать, однако хотя бы один из них должен присутствовать
24 После генерации исключения рассматриваются блоки в порядке возрастания удаленности Сначала смотрится статическая вложенность – вложенность блоков кода ( внутри метода ) Затем смотрится динамическая вложенность – порядок вызовов в стеке В них просматриваются все обработчики (catch) сверху вниз. Если тип сгенерированного исключения – потомок типа, указанного в блоке catch, блок catch выбирается для обработки этого исключения Если найден блок catch, соответствующий исключению, то до выполнения кода в блоке catch выполняются все внутренние блоки finally ( если имеются ). После обработки исключения выполнение в каком - то блоке catch, все остальные блоки catch игнорируются. Блок finally выполняется всегда при выходе из блока обработки исключения, независимо от того возникло ли исключение или нет, обработано ли оно или нет. Блок finally выполнится всегда. Если исключение возникло и обработано, то выполнение продолжается с кода, следующего за обработавшим исключение try-catch-finally блоком ( сначала выполнив блок finally) Если при возникновении исключения не находится подходящий блок catch, т. е. исключение остается не обработанным, то выполнение программы аварийно завершается.
25 Способы восстановления после исключения try { // Читаем файл } catch (FileNotFoundException e) { throw e; } catch (FileLoadException) { throw; } catch (IOException e) { throw new MyException (" Что - то не так при работе с файлом ", e); } catch (Exception) { // Все ок. Не генерируем новое исключения } Еще раз сгенерировать то же исключение для передачи информации о нем коду, расположенному выше в стеке ; Сгенерировать исключение другого типа для передачи дополнительной информации коду, расположенному выше в стеке ; Позволить программному потоку выйти из блока catch естественным образом
26 Базовый класс для всех исключений Message Поле Message – описание возникшего исключения Source Поле Source – ссылка на объект, сгенерировавший исключение, или на сборку, в которой возникло исключение StackTrace Поле StackTrace – стек вызовов InnerExeption Поле InnerExeption – предыдущее исключение ( при дальнейшей передачи исключения )
27 Исключения
28 Типы, допускающие неопределенное значение Работа со строками String Динамически изменяемые строки – класс StringBuilder Регулярные выражения – класс Regex Обработка исключений
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.