Текстовые данные в C# представляются посредством ключевых слов string
и char
, которые являются сокращенными обозначениями для типов System.String
и System.Char
(оба основаны на Unicode). Как вам уже может быть известно, string
представляет непрерывное множество символов (например, "Hello"
), a char
— одиночную ячейку в string
(например, 'Н'
).
Помимо возможности хранения одиночного элемента символьных данных тип System.Char
предлагает немало другой функциональности. Используя статические методы System.Char
, можно выяснять, является данный символ цифрой, буквой, знаком пунктуации или чем-то еще. Взгляните на следующий метод:
static void CharFunctionality
{
Console.WriteLine("=> char type Functionality:");
char myChar = 'a';
Console.WriteLine("char.IsDigit('a'): {0}", char.IsDigit(myChar));
Console.WriteLine("char.IsLetter('a'): {0}", char.IsLetter(myChar));
Console.WriteLine("char.IsWhiteSpace('Hello There', 5): {0}",
char.IsWhiteSpace("Hello There", 5));
Console.WriteLine("char.IsWhiteSpace('Hello There', 6): {0}",
char.IsWhiteSpace("Hello There", 6));
Console.WriteLine("char.IsPunctuation('?'): {0}",
char.IsPunctuation('?'));
Console.WriteLine;
}
В методе CharFunctionality
было показано, что для многих членов System.Char
предусмотрены два соглашения о вызове: одиночный символ или строка с числовым индексом, указывающим позицию проверяемого символа.
Разбор значений из строковых данных
Типы данных .NET Core предоставляют возможность генерировать переменную лежащего в основе типа, имея текстовый эквивалент (например, путем выполнения разбора) Такой прием может оказаться исключительно удобным, когда вы хотите преобразовывать в числовые значения некоторые вводимые пользователем данные (вроде элемента, выбранного в раскрывающемся списке внутри графического пользовательского интерфейса) Ниже приведен пример метода ParseFromStrings
, содержащий логику разбора:
static void ParseFromStrings
{
Console.WriteLine("=> Data type parsing:");
bool b = bool.Parse("True");
Console.WriteLine("Value of b: {0}", b); // Вывод значения b
double d = double.Parse("99.884");
Console.WriteLine("Value of d: {0}", d); // Вывод значения d
int i = int.Parse("8");
Console.WriteLine("Value of i: {0}", i); // Вывод значения i
char c = Char.Parse("w");
Console.WriteLine("Value of c: {0}", c); // Вывод значения с
Console.WriteLine;
}
Использование метода TryParse для разбора значений из строковых данных
Проблема с предыдущим кодом связана с тем, что если строка не может быть аккуратно преобразована в корректный тип данных, то сгенерируется исключение. Например, следующий код потерпит неудачу во время выполнения:
bool b = bool.Parse("Hello");
Решение предусматривает помещение каждого вызова Parse
в блок try-catch
(обработка исключений подробно раскрывается в главе 7), что добавит много кода, или применение метода TryParse
. Метод TryParse
принимает параметр out
(модификатор out
рассматривается в главе 4) и возвращает значение bool
, которое указывает, успешно ли прошел разбор. Создайте новый метод по имени ParseFromStringWithTryParse
и поместите в него такой код:
static void ParseFromStringsWithTryParse
{
Console.WriteLine("=> Data type parsing with TryParse:");
if (bool.TryParse("True", out bool b))
{
Console.WriteLine("Value of b: {0}", b); // Вывод значения b
}
else
{
Console.WriteLine("Default value of b: {0}", b);
// Вывод стандартного значения b
}
string value = "Hello";
if (double.TryParse(value, out double d))
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT