Упражнение. Изучение метода TryParse()
- 12 мин
При работе с данными иногда необходимо преобразовать строковые данные в числовый тип данных. Как вы узнали в предыдущем уроке, так как строковый тип данных может содержать нечисловое значение, возможно, что преобразование из string типа числовых данных приводит к ошибке среды выполнения.
Например, приведенный ниже код
string name = "Bob";
Console.WriteLine(int.Parse(name));
вызывает такое исключение:
System.FormatException: 'Input string was not in a correct format.'
Чтобы избежать исключения формата, используйте метод TryParse() для целевого типа данных.
Использование метода TryParse()
Метод TryParse() выполняет несколько операций одновременно:
- Он пытается преобразовать строку в указанный числовой тип данных.
- При успешном выполнении оно сохраняет преобразованное значение в параметре out, описанное в следующем разделе.
- Возвращает значение,
boolуказывающее, выполнено ли действие успешно или завершилось сбоем.
Логическое возвращаемое значение можно использовать для выполнения действий по значению (например, при выполнении некоторых вычислений) или выводить сообщение, если операция синтаксического анализа была неудачной.
Примечание.
В этом упражнении вы будете использовать int тип данных, но аналогичный TryParse() метод доступен для всех числовых типов данных.
Выходные параметры
Методы могут возвращать значение или возвращать "void", то есть они не возвращают значения. Кроме того, они могут возвращать значения посредством параметров, которые определяются так же, как входной параметр out, но содержат ключевое слово out.
TryParse() строка в int
Удалите или используйте оператор
//строковый комментарий, чтобы закомментировать весь код из предыдущих упражнений.Обновите код в редакторе Visual Studio Code следующим образом:
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }Изучите эту строку кода:
if (int.TryParse(value, out result))При вызове метода с параметром
outнеобходимо использовать ключевое словоoutперед переменной, которая содержит значение. Параметр назначается переменнойoutв кодеresult(int.TryParse(value,out result.)Затем можно использовать значениеout, которое параметр содержит в остальной части кода с помощью переменнойresult.Метод
int.TryParse()возвращаетсяtrue, если он успешно преобразовалstringпеременнуюvalueв объектint; в противном случае возвращаетсяfalse. Поэтому заключите этот оператор в операторif, после чего выполните соответствующую логику решения.Преобразованное значение хранится в переменной
intresult. Переменнаяintresultобъявлена и инициализирована до этой строки кода, поэтому она должна быть доступна как внутри блоков кода, относящихся к операторамifиelse, так и вне их.Ключевое
outслово указывает компилятору, чтоTryParse()метод не возвращает значение только традиционным способом (как возвращаемое значение), но также передает выходные данные с помощью этого двустороннего параметра.При выполнении этого кода вы должны увидеть следующие выходные данные.
Measurement: 102
Использование синтаксического анализа int позже в коде
Чтобы продемонстрировать, что
resultпеременная, объявленная ранее, заполняется параметромoutи также доступна позже в коде, обновите код в редакторе Visual Studio Code следующим образом:string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");В меню "Файл Visual Studio Code" нажмите кнопку "Сохранить". Перед созданием или выполнением кода необходимо сохранить файл Program.cs.
На панели обозревателя откройте терминал в папке TestProject, щелкните правой кнопкой мыши TestProject и выберите "Открыть в интегрированном терминале". Панель терминала должна открыться и должна содержать командную строку, показывающую, что терминал открыт для расположения папки TestProject.
В командной строке терминала, чтобы запустить код, введите dotnet run и нажмите Enter.
Примечание.
Если появится сообщение "Не удалось найти проект для запуска", убедитесь, что в командной строке терминала отображается ожидаемое расположение папки TestProject. Например:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Должен появиться следующий результат:
Measurement: 102 Measurement (w/ offset): 152Изучите последнюю строку кода в предыдущем примере,
Console.WriteLine($"Measurement (w/ offset): {50 + result}");так какresultпеременная определена вне инструкции if, к ней можно получить доступ позже в коде.
Измените строковую переменную на значение, которое невозможно проанализировать
Наконец, посмотрите на другой сценарий - где TryParse() намеренно присваивается плохое значение, которое не может быть преобразовано в int.
Измените первую строку кода, повторно инициализируйте переменную
valueв другое значение.string value = "bad";Кроме того, измените последнюю строку кода, чтобы проверить, превышает ли результат ноль, прежде чем выводить второе сообщение.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Теперь весь пример кода должен соответствовать следующему коду:
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Сохраните файл кода и используйте Visual Studio Code для запуска кода. Вы должны получить следующий результат:
Unable to report the measurement.Проверьте последние две строки кода, добавленные в предыдущем примере.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Так как
resultон определен за пределамиifинструкции,resultего можно получить позже в коде за пределами блоков кода.resultТаким образом, можно проверить значение больше нуля, прежде чем разрешатьresult+ смещение записываться в виде выходных данных.resultПроверка значения, больше нуля, не позволяет печатать значение смещенияUnable to report the measurement.после сообщения.
Кратко
Метод TryParse() очень полезен. Вот некоторые моменты, которые следует помнить.
- Используйте
TryParse()при преобразовании строки в числовой тип данных. - Метод
TryParse()возвращает значениеtrue, если преобразование было выполнено успешно, илиfalseв противном случае. - Параметры out предоставляют вторичные средства метода, возвращающего значение. В этом случае
outпараметр возвращает преобразованное значение. - Используйте ключевое слово
outпри передаче аргумента методу, который определилoutпараметр.
Проверьте свои знания
Обратная связь
Были ли сведения на этой странице полезными?
Нет
Нужна помощь с этой темой?
Хотите попробовать использовать Ask Learn для уточнения или руководства по этой теме?