Язык программирования C#9 и платформа .NET5
Часть 57 из 642 Информация о книге
Использование типов System.DateTime и System.TimeSpan
В пространстве имен
определено несколько полезных типов данных, для которых отсутствуют ключевые слова языка С#, в том числе структурыSystemиDateTime. (При желании можете самостоятельно ознакомиться с типомTimeSpan, показанным на рис. 3.2.)System.VoidТип
содержит данные, представляющие специфичное значение даты (месяц, день, год) и времени, которые могут форматироваться разнообразными способами с применением членов этого типа. СтруктураDateTimeпозволяет легко определять и трансформировать единицы времени, используя различные ее члены.TimeSpanstatic void UseDatesAndTimes(){Console.WriteLine("=> Dates and Times:");<b> // Этот конструктор принимает год, месяц и день.</b>DateTime dt = new DateTime(2015, 10, 17);<b> // Какой это день месяца?</b>Console.WriteLine("The day of {0} is {1}", dt.Date, dt.DayOfWeek);<b> // Сейчас месяц декабрь.</b>dt = dt.AddMonths(2);Console.WriteLine("Daylight savings: {0}", dt.IsDaylightSavingTime());<b> // Этот конструктор принимает часы, минуты и секунды.</b>TimeSpan ts = new TimeSpan(4, 30, 0);Console.WriteLine(ts);<b> // Вычесть 15 минут из текущего значения TimeSpan и вывести результат.</b>Console.WriteLine(ts.Subtract(new TimeSpan(0, 15, 0)));}Работа с пространством имен System.Numerics
В пространстве имен
определена структура по имениSystem.Numerics. Тип данныхBigIntegerможет применяться для представления огромных числовых значений, которые не ограничены фиксированным верхним или нижним пределом.BigIntegerНа заметку! В пространстве имен
также определена вторая структура по имениSystem.Numerics, которая позволяет моделировать математически сложные числовые данные (например, мнимые единицы, вещественные данные, гиперболические тангенсы). Дополнительные сведения о структуреComplexможно найти в документации по .NET Core.ComplexНесмотря на то что во многих приложениях .NET Core потребность в структуре
может никогда не возникать, если все-таки необходимо определить большое числовое значение, то в первую очередь понадобится добавить в файл показанную ниже директивуBigInteger:using// Здесь определен тип BigInteger:using System.Numerics;Теперь с применением операции
можно создать переменнуюnew. Внутри конструктора можно указать числовое значение, включая данные с плавающей точкой. Однако компилятор C# неявно типизирует числа не с плавающей точкой какBigInteger, а числа с плавающей точкой — какint. Как же тогда установить дляdoubleбольшое значение, не переполнив стандартные типы данных, которые задействуются для неформатированных числовых значений?BigIntegerПростейший подход предусматривает определение большого числового значения в виде текстового литерала, который затем может быть преобразован в переменную
посредством статического методаBigInteger. При желании можно также передавать байтовый массив непосредственно конструктору классаParse().BigIntegerНа заметку! После того как переменной
присвоено значение, модифицировать ее больше нельзя, т.к. это неизменяемые данные. Тем не менее, в классеBigIntegerопределено несколько членов, которые возвращают новые объектыBigIntegerна основе модификаций данных (такие как статический методBigInteger, используемый в следующем примере кода).Multiply()В любом случае после определения переменной
вы обнаружите, что в этом классе определены члены, похожие на члены в других внутренних типах данных C# (например,BigIntegerлибоfloat). Вдобавок в классеintопределен ряд статических членов, которые позволяют применять к переменнымBigIntegerбазовые математические операции (наподобие сложения и умножения). Взгляните на пример работы с классомBigInteger:BigIntegerstatic void UseBigInteger(){Console.WriteLine("=> Use BigInteger:");BigInteger biggy =BigInteger.Parse("9999999999999999999999999999999999999999999999");Console.WriteLine("Value of biggy is {0}", biggy);Console.WriteLine("Is biggy an even value?: {0}", biggy.IsEven);Console.WriteLine("Is biggy a power of two?: {0}", biggy.IsPowerOfTwo);BigInteger reallyBig = BigInteger.Multiply(biggy,BigInteger.Parse("8888888888888888888888888888888888888888888"));Console.WriteLine("Value of reallyBig is {0}", reallyBig);}Важно отметить, что тип данных
реагирует на внутренние математические операции С#, такие какBigInteger,+и-. Следовательно, вместо вызова метода*для перемножения двух больших чисел можно использовать такой код:BigInteger.Multiply()