Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

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))

{

Console.WriteLine("Value of d: {0}", d);

}

else

{

// Преобразование входного значения в double потерпело неудачу

// и переменной было присвоено стандартное значение.

Console.WriteLine("Failed to convert the input ({0}) to a double
and

the variable was
assigned the default {1}", value,d);

}

Console.WriteLine;

}

Если вы только начали осваивать программирование и не знаете, как работают операторы

if/else
, то они подробно рассматриваются позже в главе. В приведенном выше примере важно отметить, что когда строка может быть преобразована в запрошенный тип данных, метод
TryParse
возвращает
true
и присваивает разобранное значение переменной, переданной методу. В случае невозможности разбора значения переменной присваивается стандартное значение, а метод
TryParse
возвращает
false
.

Использование типов System.DateTime и System.TimeSpan

В пространстве имен

System
определено несколько полезных типов данных, для которых отсутствуют ключевые слова языка С#, в том числе структуры
DateTime
и
TimeSpan
. (При желании можете самостоятельно ознакомиться с типом
System.Void
, показанным на рис. 3.2.)

Тип

DateTime
содержит данные, представляющие специфичное значение даты (месяц, день, год) и времени, которые могут форматироваться разнообразными способами с применением членов этого типа. Структура
TimeSpan
позволяет легко определять и трансформировать единицы времени, используя различные ее члены.

static void UseDatesAndTimes

{

Console.WriteLine("=> Dates and Times:");

// Этот конструктор принимает год, месяц и день.

DateTime dt = new DateTime(2015, 10, 17);

// Какой это день месяца?

Console.WriteLine("The day of {0} is {1}", dt.Date, dt.DayOfWeek);

// Сейчас месяц декабрь.

dt = dt.AddMonths(2);

Console.WriteLine("Daylight savings: {0}", dt.IsDaylightSavingTime);

//
Этот конструктор принимает часы, минуты и секунды.

TimeSpan ts = new TimeSpan(4, 30, 0);

Console.WriteLine(ts);

// Вычесть 15 минут из текущего значения TimeSpan и вывести результат.

Console.WriteLine(ts.Subtract(new TimeSpan(0, 15, 0)));

}

Работа с пространством имен System.Numerics

В пространстве имен

System.Numerics
определена структура по имени
BigInteger
. Тип данных
BigInteger
может применяться для представления огромных числовых значений, которые не ограничены фиксированным верхним или нижним пределом.

На заметку! В пространстве имен

System.Numerics
также определена вторая структура по имени
Complex
, которая позволяет моделировать математически сложные числовые данные (например, мнимые единицы, вещественные данные, гиперболические тангенсы). Дополнительные сведения о структуре
Complex
можно найти в документации по .NET Core.

Несмотря на то что во многих приложениях .NET Core потребность в структуре

BigInteger
может никогда не возникать, если все-таки необходимо определить большое числовое значение, то в первую очередь понадобится добавить в файл показанную ниже директиву
using
:

// Здесь определен тип BigInteger:

using System.Numerics;

Теперь с применением операции

new
можно создать переменную
BigInteger
. Внутри конструктора можно указать числовое значение, включая данные с плавающей точкой. Однако компилятор C# неявно типизирует числа не с плавающей точкой как
int
, а числа с плавающей точкой — как
double
. Как же тогда установить для
BigInteger
большое значение, не переполнив стандартные типы данных, которые задействуются для неформатированных числовых значений?

Простейший подход предусматривает определение большого числового значения в виде текстового литерала, который затем может быть преобразован в переменную

BigInteger
посредством статического метода
Parse
. При желании можно также передавать байтовый массив непосредственно конструктору класса
BigInteger
.

На заметку! После того как переменной

BigInteger
присвоено значение, модифицировать ее больше нельзя, т.к. это неизменяемые данные. Тем не менее, в классе
BigInteger
определено несколько членов, которые возвращают новые объекты
BigInteger
на основе модификаций данных (такие как статический метод
Multiply
, используемый в следующем примере кода).

В любом случае после определения переменной

BigInteger
вы обнаружите, что в этом классе определены члены, похожие на члены в других внутренних типах данных C# (например,
float
либо
int
). Вдобавок в классе
BigInteger
определен ряд статических членов, которые позволяют применять к переменным
BigInteger
базовые математические операции (наподобие сложения и умножения). Взгляните на пример работы с классом
BigInteger
:

Поделиться с друзьями: