Книга: C# 4.0: полное руководство

Структуры .NET, соответствующие встроенным типам значений

Структуры .NET, соответствующие встроенным типам значений

Структуры, соответствующие встроенным в C# типам значений, были представлены в главе 14, где они упоминались в связи с преобразованием строк, содержащих числовые значения в удобочитаемой форме, в эквивалентные двоичные значения. В этом разделе структуры .NET рассматриваются более подобно.

Имена структур .NET и соответствующие им ключевые слова, обозначающие типы значений в С#, перечислены в приведенной ниже таблице.

Имя структуры в .NET Имя типа значения в C#
System.Boolean       bool
System.Char          char
System.Decimal       decimal
System.Double        double
System.Single        float
System.Intl6         short
System.Int32         int
System.Int64         long
System.Ulntl6        ushort
System.UInt32        uint
System.UInt64        ulong
System.Byte          byte
System.Sbyte         sbyte

Используя члены, определенные в этих структурах, можно выполнять операции над значениями простых типов данных. Все перечисленные выше структуры рассматриваются далее по порядку.

---------------------------

ПРИМЕЧАНИЕ

Некоторые методы, определенные в структурах, соответствующих встроенным в C# типам значений, принимают параметры типа IFormatProvider или NumberStyles. Тип

IFormatProvider вкратце описывается далее в этой главе, а тип NumberStyles представляет собой перечисление из пространства имен System.Globalization. Вопросы форматирования подробнее рассматриваются в главе 22.

---------------------------

Структуры целочисленных типов данных

Ниже перечислены структуры целочисленных типов данных.

Byte
SByte
Int16
Uint16
Int32
UInt32
Int64
Uint64

Каждая из этих структур содержит одинаковое количество членов. В табл. 21.2 для примера перечислены члены структуры Int32. Аналогичные члены в виде методов имеются и у других структур, за исключением целочисленного типа, который они представляют.

Помимо перечисленных выше методов, в структурах целочисленных типов данных определены следующие поля типа const.

MaxValue
MinValue

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

Во всех структурах целочисленных типов данных реализуются следующие интерфейсы: IComparable, IComparable<T>, IConvertible, IFormattable и IEquatable<T>, где параметр обобщенного типа Т заменяется соответствующим типом данных. Например, в структуре Int32 вместо Т подставляется тип int.

Таблица 21.2. Методы поддерживаемые структурой int

Метод - Назначение

public int CompareTo(object value) - Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если вызывающий объект имеет меньшее значение; и, наконец, положительное значение, если вызывающий объект имеет большее значение

 public int CompareTo(int value) - Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если вызывающий объект имеет меньшее значение; и, наконец, положительное значение, если вызывающий объект имеет большее значение

public override bool Equals(object obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению параметра obj

public bool Equals(int obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению параметра obj

public override int GetHashCode() - Возвращает хеш-код для вызывающего объекта

public TypeCode GetTypeCode() - Возвращает значение перечисления TypeCode для эквивалентного типа. Например, для структуры Int32 возвращается значение TypeCode.Int32 

public static int Parse(string s) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s. Если числовое значение не представлено в строке так, как определено в структуре данного типа, то генерируется исключение

public static int Parse(string s, IformatProvider provider) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider. Если числовое значение не представлено в строке так, как определено в структуре данного типа, то генерируется исключение

public static int Parse(string s, NumberStyles styles) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием данных о стилях, определяемых параметром styles. Если числовое значение не представлено в строке так, как определено в структуре данного типа, то генерируется исключение

public static int Parse(string s, NumberStyles styles, IformatProvider provider) - Возвращает двоичный эквивалент числа, заданного в виде строки символьной s, с использованием данных о стилях, определяемых параметром styles, а также форматов данных, характерных для конкретной культурной среды и определяемых параметром provider. Если числовое значение не представлено в строке так, как определено в структуре данного типа, то генерируется исключение

public override string ToString() - Возвращает строковое представление значения вызывающего объекта

public string ToString(string format) -  Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром format

public string ToString(IformatProvider provider) - Возвращает строковое представление значения вызывающего объекта с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider

public string ToString(string format, IformatProvider provider) - Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром format, но с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider

public static bool TryParse(string s,out  int result) - Предпринимает попытку преобразовать числовое значение, заданное в виде символьной строки s, в двоичное значение. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true, а иначе возвращается логическое значение false, в отличие от метода Parse(), который генерирует исключение при неудачном исходе преобразования

public static bool TryParse(string s, NumberStyles styles, IformatProvider provider,out int result) - Предпринимает попытку преобразовать числовое значение, заданное в виде символьной строки s, в двоичное значение с использованием информации о стилях, обозначаемых параметром styles, а также форматов данных, характерных для конкретной культурной среды и определяемых параметром provider. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true, а иначе возвращается логическое значение false, в отличие от метода Parse(), который генерирует исключение при неудачном исходе преобразования

Структуры типов данных с плавающей точкой

Типам данных с плавающей точкой соответствуют только две структуры: Double и Single. Структура Single представляет тип float. Ее методы перечислены в табл. 21.3, а поля — в табл. 21.4. Структура Double представляет тип double.

Ее методы перечислены в табл. 21.5, а поля — в табл. 21.6. Как и в структурах целочисленных типов данных, при вызове метода Parse() или ToString() из структур типов данных с плавающей точкой можно указывать информацию, характерную для конкретной культурной среды, а также данные форматирования.

Таблица 21.3. Методы, поддерживаемые структурой Single

Метод - назначение

public int CompareTo(object value) - Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное число, если вызывающий объект имеет меньшее значение, и, наконец, положительное значение, если вызывающий объект имеет большее значение

public int CompareTo(float value) - Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное число, если вызывающий объект имеет меньшее значение, и, наконец, положительное значение, если вызывающий объект имеет большее значение

public override bool Equals(object obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению obj

public bool Equals(float obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению obj

public override int  GetHashCode() - Возвращает хеш-код для вызывающего объекта

public TypeCode GetTypeCode() - Возвращает значение из перечисления TypeCode для структуры Single, т.е. TypeCode.Single

public static bool Islnfinity(float f) - Возвращает логическое значение true, если значение f представляет плюс или минус бесконечность. В противном случае возвращает логическое значение false

public static bool IsNaN(float f) - Возвращает логическое значение true, если значение f не является числовым. В противном случае возвращает логическое значение false

public static bool IsPositivelnfinity(float f) - Возвращает логическое значение true, если значение f представляет плюс бесконечность. В противном случае возвращает логическое значение false

public static bool IsNegativelnfinity(float f) - Возвращает логическое значение true, если значение f представляет минус бесконечность. В противном случае возвращает логическое значение false

public static float Parse(string s) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s. Если в строке не представлено числовое значение типа float, то генерируется исключение

public static float Parse(string s, IformatProvider provider) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider. Если в строке не представлено числовое значение типа float, то генерируется исключение

public static float Parse(string s, NumberStyles styles) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием данных о стилях, определяемых параметром styles. Если в строке не представлено числовое значение типа float, то генерируется исключение

public static float Parse(string s, NumberStyles styles, IformatProvider provi der) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider, а также сведений о стилях, обозначаемых параметром styles. Если в строке не представлено числовое значение типа float, то генерируется исключение

public override string ToString() - Возвращает строковое представление значения вызывающего объекта

public string ToString(string format) - Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром format

public string ToString(IformatProvider provi der) - Возвращает строковое представление значения вызывающего объекта с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider

public string ToString(string format, IformatProvider provider) - Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром format, но с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider

public static bool TryParse(string s,out float result) - Предпринимает попытку преобразовать число, заданное в виде символьной строки s, в значение типа float. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true, а иначе возвращается логическое значение false, в отличие от метода Parse(), который генерирует исключение при неудачном исходе преобразования

public static bool TryParse(string s, NumberStyles styles, IformatProvider provider,out float result) - Предпринимает попытку преобразовать числовое значение, заданное в виде символьной строки s, в значение типа float, как указано в форматирующей строке, определяемой параметром format, но с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider, a, также сведений о стилях, обозначаемых параметром styles. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true, а иначе возвращается логическое значение false, в отличие от метода Parse(), который генерирует исключение при неудачном исходе преобразования

Таблица 21.4. Поля, поддерживаемые структурой Single

Поле - Назначение

public const float Epsilon - Наименьшее ненулевое положительное значение

public const float MaxValue - Наибольшее значение, допустимое для данных типа float

public const float MinValue - Наименьшее значение, допустимое для данных типа float

public const float NaN - Значение, не являющееся числом

public const float NegativeInfinity - Значение, представляющее минус бесконечность

public const float PositiveInfinity - Значение, представляющее плюс бесконечность

public const float Epsilon

Таблица 21.5. Методы, поддерживаемые структурой Double

Метод - Назначение 

public int CompareTo(object value) - Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное число, если вызывающий объект имеет меньшее значение, и, наконец, положительное значение, если вызывающий объект имеет большее значение

public int CompareTo(double value) - Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное число, если вызывающий объект имеет меньшее значение, и, наконец, положительное значение, если вызывающий объект имеет большее значение

public override bool Equals(object obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению obj

public bool Equals(double obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению obj

public override int GetHashCode() - Возвращает хеш-код для вызывающего объекта

public TypeCode GetTypeCode() - Возвращает значение из перечисления TypeCode для структуры Double, т.е. TypeCode.Double

public static bool Islnfinity(double d) - Возвращает логическое значение true, если значение d представляет плюс или минус бесконечность. В противном случае возвращает логическое значение false

public static bool  IsNaN(double d) Возвращает логическое значение true, если значение d не является числовым. В противном случае возвращает логическое значение false

public static bool IsPositivelnfinity(double d) - Возвращает логическое значение true, если значение d представляет плюс бесконечность. В противном случае возвращает логическое значение false

public static bool IsNegativelnfinity(double  d) - Возвращает логическое значение true, если значение d представляет минус бесконечность. В противном случае возвращает логическое значение false

public static double Parse(string s) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s. Если в строке не представлено числовое значение типа double, то генерируется исключение

public static double Parse(string s, IFormatProvider provider) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider. Если в строке не представлено числовое значение типа double, то генерируется исключение

public static double Parse (string s, NumberStyles styles) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием данных о стилях, определяемых параметром styles. Если в строке не представлено числовое значение типа double, то генерируется исключение

public static double Parse(string s, NumberStyles styles, IFormatProvider provider) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider, а также данных о стилях, обозначаемых параметром styles. Если в строке не представлено числовое значение типа double, то генерируется исключение

public override string ToString() - Возвращает строковое представление значения вызывающего объекта

public string ToString(string format) - Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром format

public string ToString(IformatProvider provider) - Возвращает строковое представление значения вызывающего объекта с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider

public string ToString(string format, IformatProvider provider) - Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром format, но с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider

public static bool TryParse(string s,out double result) - Предпринимает попытку преобразовать число, заданное в виде символьной строки s, в значение типа double. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true, а иначе возвращается логическое значение false, в отличие от метода Parse(), который генерирует исключение при неудачном исходе преобразования

public static bool TryParse(string s,NumberStyles styles,IFormatProvider provider,out double result) - Предпринимает попытку преобразовать числовое значение, заданное в виде символьной строки s, в значение типа double, как указано в форматирующей строке, определяемой параметром format, но с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider, а также сведений о стилях, обозначаемых параметром styles. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true, а иначе возвращается логическое значение false, в отличие от метода Parse(), который генерирует исключение при неудачном исходе преобразования

Таблица 21.6. Поля, поддерживаемые структурой Double

Поле - Назначение

public const double Epsilon - Наименьшее ненулевое положительное значение

public const double MaxValue -  Наибольшее значение, допустимое для данных типа double

public const double MinValue - Наименьшее значение, допустимое для данных типа double

public const double NaN - Значение, не являющееся числом

public const double NegativeInfinity - Значение, представляющее минус бесконечность

public const double PositiveInfinity - Значение, представляющее плюс бесконечность

Структура Decimal

Структура Decimal немного сложнее, чем ее аналоги для целочисленных типов данных, а также типов данных с плавающей точкой. Она содержит немало конструкторов, полей, методов и операторов, способствующих использованию типа decimal вместе с другими числовыми типами, поддерживаемыми в С#. Так, целый ряд методов из этой структуры обеспечивает преобразование типа decimal в другие числовые типы.

В структуре Decimal определено восемь открытых конструкторов. Ниже приведены шесть наиболее часто используемых из них.

public Decimal(int значение)
public Decimal(uint значение)
public Decimal(long значение)
public Decimal(ulong значение)
public Decimal(float значение)
public Decimal(double значение)

Каждый из этих конструкторов создает объект типа Decimal из значения указанного типа.

Кроме того, объект типа Decimal может быть создан из отдельно указываемых составляющих с помощью следующего конструктора.

public Decimal(int lo, int mid, int hi, bool IsNegative, byte scale)

Десятичное значение состоит из трех частей. Первую часть составляет 96-разрядное целое значение, вторую — флаг знака, третью — масштабный коэффициент. В частности, 96-разрядное целое значение передается конструктору тремя 32-разрядными фрагментами с помощью параметров lo, mid и hi; знак флага — с помощью параметра IsNegative, причем логическое значение false этого параметра обозначает положительное число, тогда как логическое значение true обозначает отрицательное число; а масштабный коэффициент — с помощью параметра scale, принимающего значения от 0 до 28. Этот коэффициент обозначает степень числа 10 (т.е. 10scale), на которую делится число для получения его дробной части.

Вместо того чтобы передавать каждую составляющую объекта типа Decimal отдельно, все его составляющие можно указать в массиве, используя следующий конструктор.

public Decimal(int[] bits)

Три первых элемента типа int в массиве bits содержат 96-разрядное целое значение; 31-й разряд содержимого элемента bits [3] обозначает флаг знака (0 — положительное число, 1 — отрицательное число); а в разрядах 16-23 содержится масштабный коэффициент.

В структуре Decimal реализуются следующие интерфейсы: IComparable, IComparable<decimal>, IConvertible, IFormattable, IEquatable<decimal>, а также IDeserializationCallback.

В приведенном ниже примере программы значение типа decimal формируется вручную.

// Сформировать десятичное число вручную.
using System;
class CreateDec {
  static void Main() {
    decimal d = new decimal(12345, 0, 0, false, 2);
    Console.WriteLine(d);
  }
}

Эта программа дает следующий результат.

123.45

В данном примере значение 96-разрядного целого числа равно 12345. У него положительный знак и два десятичных разряда в дробной части.

Методы, определенные в структуре Decimal, приведены в табл.21.7, а поля — в табл. 21.8. Кроме того, в структуре Decimal определяется обширный ряд операторов и преобразований, позволяющих использовать десятичные значения вместе со значениями других типов в выражениях. Правила, устанавливающие порядок присваивания десятичных значений и их применения в выражениях, представлены в главе 3.

Таблица 21.7. Методы, определенные в структуре Decimal

Метод - Назначение

public static decimal Add(decimal "dl,decimal d2) - Возвращает значение dl + d2

public static decimal Ceiling(d) - Возвращает наименьшее целое, которое представлено в виде значения типа decimal и не меньше d. Так, если d равно 1,02, метод Ceiling() возвращает значение 2,0. А если d равно -1,02, то метод Ceiling() возвращает значение -1

public static int Compare(decimal dl,decimal d2) - Сравнивает числовое значение dl со значением d2. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если dl меньше d2; и, наконец, положительное значение, если dl больше d2

public int CompareTo(object value) Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если вызывающий объект имеет меньшее значение; и, наконец, положительное значение, если вызывающий объект имеет большее значение

public int CompareTo(decimal value) - Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если вызывающий объект имеет меньшее значение; и, наконец, положительное значение, если вызывающий объект имеет большее значение

public static decimal Divide(decimal dl, decimal d2) - Возвращает частное отделения dl/ d2

public bool Equals(decimal value) - Возвращает логическое значение true, если значение вызывающего объекта равно значению value

public override bool Equals(object value) - Возвращает логическое значение true, если значение вызывающего объекта равно значению value

public static bool Equals(decimal dl,decimal d2) - Возвращает логическое значение true, если если dl равно d2

public static decimal Floor(decimal d) - Возвращает наибольшее целое, которое пред ставлено в виде значения типа decimal и не больше d. Так, если d равно 1,02, метод Floor() возвращает значение 1,0. А если d равно -1,02, метод Floor 0 возвращает значение -2

public static decimal FromOACurrency(long cy) - Преобразует значение су из формата денежной единицы, применяемого в компоненте OLE Automation, в его десятичный эквивалент и возвращает полученный результат

public static int[]  GetBits(decimal d) - Возвращает двоичное представление значения d в виде массива типа int. Организация этого массива описана в тексте настоящего раздела

public override int GetHashCode() - Возвращает хеш-код для вызывающего объекта

public TypeCode GetTypeCode() Возвращает значение из перечисления TypeCode для структуры Decimal, т.е. TypeCode.Decimal

public static decimal  Multiply(decimal dl,decimal d2) - Возвращает произведение dl* d2

public static decimal Negate(decimal d) - Возвращает значение -d

public static decimal Parse(string s) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s. Если в строке не представлено числовое значение типа decimal, то генерируется исключение

public static decimal Parse(string s, IFormatProvider provider) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider. Если в строке не представлено числовое значение типа decimal, то генерируется исключение

public static decimal Parse(string s,NumberStyles styles) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием данных о стилях, определяемых параметром styles. Если в строке не представлено числовое значение типа decimal, то генерируется исключение

public static decimal Parse (string s,NumberStyles styles,IformatProvider provider) - Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider, а также данных о стилях, обозначаемых параметром styles. Если в строке не представлено числовое значение типа decimal, то генерируется исключение

public static decimal Remainder(decimal dl,decimal d2) - Возвращает остаток от целочисленного деления dl / d2

public static decimal Round(decimal d) - Возвращает значение d, округленное до ближайшего целого числа

public static decimal Round(decimal d,int decimals) - Возвращает значение d, округлеяное до числа с

количеством цифр в дробной части, равным значению параметра decimals, которое должно находиться в пределах от 0 до 28

public static decimal Round(decimal d, MidPoiritRounding mode) - Возвращает значение d, округленное до ближайшего целого числа в режиме, определяемом параметром mode. Режим округления применяется лишь в том случае, если значение d оказывается посредине между двумя целыми числами

public static decimal Round(decimal d,int decimals, MidPointRounding mode) - Возвращает значение d, округленное до числа с количеством цифр в дробной части, равным значению параметра decimals, которое должно находиться в пределах от 0 до 28, а параметр mode определяет режим округления. Режим округления применяется лишь в том случае, если значение d оказывается посредине между двумя округляемыми числами

public static decimal Subtract(decimal d1,decimal d2) - Возвращает разность d1 - d2

public static byte ToByte(decimal value) - Возвращает эквивалент значения value типа byte. Дробная часть отбрасывается. Если значение value оказывается вне диапазона представления чисел для типа byte, то генерируется исключение OverflowException

public static double ToDouble(decimal d) - Возвращает эквивалент значения типа double. При этом возможна потеря точности, поскольку у значения типа double меньше значащих цифр, чем у значения типа decimal

public static short  Tolntl6(decimal d) Возвращает эквивалент значения типа short. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа short, то генерируется исключение OverflowException

public static int ToInt32(decimal d) - Возвращает эквивалент значения d типа int. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа int, то генерируется исключение OverflowException

public static long ToInt64(decimal d) - Возвращает эквивалент значения d типа long. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа long, то генерируется исключение OverflowException

public static long ToOACurrency(decimal value) - Преобразует значение value в его эквивалент формата денежной единицы, применяемого в компоненте OLE Automation, и возвращает полученный результат

public static sbyte ToSByte(decimal value) - Возвращает эквивалент значения value типа sbyte. Дробная часть отбрасывается. Если значение value оказывается вне диапазона представления чисел для типа sbyte, то генерируется исключение OverflowException

public static float ToSingle(decimal d) - Возвращает эквивалент значения типа float. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа float, то генерируется исключение OverflowException

public override string ToString() - Возвращает строковое представление значения вызывающего объекта в используемом по умолчанию формате

public string ToString(string format) - Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром format

public string ToString(IFormatProvider provider) - Возвращает строковое представление значения вызывающего объекта с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider

public string ToString(string  format,IFormatProvider provider) - Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром format, но с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider

public static ushort ToUIntl6(decimal value) - Возвращает эквивалент значения value типа ushort. Дробная часть отбрасывается. Если значение value оказывается вне диапазона представления чисел для типа ushort, то генерируется исключение OverflowException

public static uint ToUInt32(decimal d) - Возвращает эквивалент значения типа uint. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа uint, то генерируется исключение OverflowException

public static ulong ToUInt64(decimal d) Возвращает эквивалент значения типа ulong. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа ulong, то генерируется исключение OverflowException

public static decimal Truncate(decimal d) Возвращает целую часть числа d. Дробная часть отбрасывается

Таблица 21.8. Поля, поддерживаемые структурой Decimal

public static readonly decimal MaxValue - максимальное число

public static readonly decimal MinusOne - -1

public static readonly decimal MinValue - минимальное число

public static readonly decimal One - единица

public static readonly decimal Zero - ноль

Структура Char

Структура Char соответствует типу char и применяется довольно часто, поскольку предоставляет немало методов, позволяющих обрабатывать символы и распределять их по отдельным категориям. Например, символ строчной буквы можно преобразовать в символ прописной буквы, вызвав метод ToUpper(), а с помощью метода IsDigit() можно определить, обозначает ли символ цифру.

Методы, определенные в структуре Char, приведены в табл. 21.9. Следует, однако, иметь в виду, что некоторые методы, например ConvertFromUtf32() и ConvertToUtf32(), позволяют обрабатывать символы уникода в форматах UTF-16 и UTF-32. Раньше все символы уникода могли быть представлены 16 разрядами, что соответствует величине значения типа char. Но несколько лет назад набор символов уникода был расширен, для чего потребовалось более 16 разрядов. Каждый символ уникода представлен кодовой точкой, а способ кодирования кодовой точки зависит от используемого формата преобразования уникода (UTF). Так, в формате UTF-16 для кодирования большинства кодовых точек требуется одно 16-разрядное значение, а для кодирования остальных кодовых точек — два 16-разрядных значения. Если для этой цели требуются два 16-разрядных значения, то для их представления служат два значения типа char. Первое символьное значение называется старшим суррогатом, а второе — младшим суррогатом. В формате UTF-32 каждая кодовая точка кодируется с помощью одного 32-разрядного значения. В структуре Char предоставляются все необходимые средства для преобразования из формата UTF-16 в формат UTF-32 и обратно.

В отношении методов структуры Char необходимо также отметить следующее: в используемых по умолчанию формах методов ToUpper() и ToLower() применяются текущие настройки культурной среды (языки и региональные стандарты), чтобы указать способ представления символов верхнего и нижнего регистра. На момент написания этой книги рекомендовалось явно указывать текущие настройки культурной среды, используя для этой цели параметр типа Culturelnfo во второй форме обоих упоминаемых методов. Класс Culturelnfo относится к пространству имен System.Globalization, а для указания текущей культурной среды следует передать свойство Culturelnfo.CurrentCulture соответствующему методу.

В структуре Char определены также следующие поля.

public const char MaxValue
public const char MinValue

Кроме того, в структуре Char реализуются следующие интерфейсы: IComparable, IComparable<char>, IConvertible и IEquatable<char>.

Таблица 21.9. Методы, определенные в структуре Char

Метод - Назначение

public int CompareTo(char value) - Сравнивает символ в вызывающем объекте с символом value. Возвращает нуль, если сравниваемые символы равны; отрицательное значение, если вызывающий объект имеет меньшее значение; и, наконец, положительное значение, если вызывающий объект имеет большее значение

public int CompareTo(object value) - Сравнивает символ в вызывающем объекте с символом value. Возвращает нуль, если сравниваемые символы равны; отрицательное значение, если вызывающий объект имеет меньшее значение; и, наконец, положительное значение, если вызывающий объект имеет больщее значение

public static string ConvertFromUtf32(int utf32) -  Преобразует кодовую точку уникода, представленную параметром utf32 в формате UTF-32, в символьную строку формата UTF-16 и возвращает полученный результат

pubic static int ConvertToUtf32 (char highSurrogate,char lowSurrogate) - Преобразует старший и младший суррогаты, представленные параметрами highSurrogate и lowSurrogate в формате UTF-16, в кодовую точку формата UTF-32 и возвращает полученный результат

pubic static int

ConvertToUtf32(string s,int index) - Преобразует пару суррогатов формата UTF-16, доступных из символьной строки по индексу s [index], в кодовую точку формата UTF-32 и возвращает полученный результат

public bool Equals(char obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению obj

public override bool Equals(object obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению obj

public override int  GetHashCode() Возвращает хеш-код для вызывающего объекта

public static double GetNumericValue(char c) Возвращает числовое значение символа с, если он обозначает цифру. В противном случае возвращает -1

public static double GetNumericValue(string s,int index) - Возвращает числовое значение символа, доступ ного из строки по индексу s [index], если он обозначает цифру. В противном случае возвращает -1

public TypeCode GetTypeCode() Возвращает значение из перечисления TypeCode для структуры Char, т.е. TypeCode.Char

public static UnicodeCategory  GetUnicodeCategory(char c) - Возвращает значение из перечисления UnicodeCategory для символа с. Перечисление UnicodeCategory определено в пространстве имен System.Globalization и распределяет символы уникода по категориям

public static UnicodeCategory GetUnicodeCategory(string s, int index) - Возвращает значение из перечисления UnicodeCategory для символа, доступного из строки по индексу s [index]. Перечисление UnicodeCategory определено в пространстве имен System.Globalization и распределяет символы уникода по категориям

public static bool sControl(char c) - Возвращает логическое значение true, если символ с является управляющим, иначе возвращает логическое значение false

public static bool IsControl(string s,int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s[index], является управляющим, иначе возвращает логическое значение false

public static bool IsDigit(char c) Возвращает логическое значение true, если символ с обозначает цифру, а иначе возвращает логическое значение false

public static bool IsDigit(string s,int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s[index], обозначает цифру, а иначе возвращает логическое значение false

public static bool IsHighSurrogate(char c) - Возвращает логическое значение true, если символьное значение с является действительным старшим суррогатом формата UTF-32, а иначе возвращает логическое значение false

public static bool IsHighSurrogate(string s,int index) - Возвращает логическое значение true, если символьное значение, доступное из строки по индексу s[ index], является действительным старшим суррогатом формата UTF-32, а иначе возвращает логическое значение false

public static bool IsLetter(char c) - Возвращает логическое значение true, если символ с обозначает букву алфавита, а иначе возвращает логическое значение false

public static bool IsLetter(string s,int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s [index], обозначает букву алфавита, а иначе возвращает логическое значение false

public static bool IsLetterOrDigit(char c) - Возвращает логическое значение true, если символ с обозначает букву алфавита или цифру, а иначе возвращает логическое значение false

public static bool IsLetterOrDigit(string s,int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s [ index], обозначает букву алфавита или цифру, а иначе возвращает логическое значение false

public static bool IsLower(char c) - Возвращает логическое значение true, если символ с обозначает строчную букву алфавита, а иначе возвращает логическое значение false

public static bool IsLower(string s,int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s [index], обозначает строчную букву алфавита, а иначе возвращает логическое значение false

public static bool IsLowSurrogate(char c) - Возвращает логическое значение true, если символьное значение с является действительным младшим суррогатом формата UTF-32, а иначе возвращает логическое значение false

public static bool IsLowSurrogate(string s , int index) - Возвращает логическое значение true, если символьное значение, доступное из строки по индексу s [ index], является действительным младшим суррогатом формата UTF-32, а иначе возвращает логическое значение false

public static bool IsNumber(char c) Возвращает логическое значение true, если символ с обозначает число (десятичное или шестнадцатеричное), а иначе возвращает логическое значение false

public static bool IsNumber(string s,int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s [ index], обозначает число (десятичное или шестнадцатеричное), а иначе возвращает логическое значение false

public static bool IsPunctuation(char c) - Возвращает логическое значение true, если символ с обозначает знак препинания, а иначе возвращает логическое значение false

public static bool IsPunctuation(string s , int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s [index], обозначает знак препинания, а иначе возвращает логическое значение false

public static bool IsSeparator(char c) - Возвращает логическое значение true, если символ с обозначает разделительный знак, а иначе возвращает логическое значение false

public static bool IsSeparator(string s, int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s [ index], обозначает разделительный знак, а иначе возвращает логическое значение false

public static bool IsSurrogate(char c) - Возвращает логическое значение true, если символьное значение с является суррогатным символом уникода, а иначе возвращает логическое значение false

public static bool IsSurrogate(string s,int index) - Возвращает логическое значение true, если символьное значение, доступное из строки по индексу s[index], является суррогатным символом уникода, а иначе возвращает логическое значение false

public static bool IsSurrogatePair(char highSurrogate, char lowSurrogate) - Возвращает логическое значение true, если символьные значения highSurrogate и lowSurrogate образуют суррогатную пару

public static bool IsSymbol(char c) - Возвращает логическое значение true, если символ с обозначает символический знак, например денежной единицы, а иначе возвращает логическое значение false

public static bool IsSymbol(string s,int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s[index], обозначает символический знак, например денежной единицы, а иначе возвращает логическое значение false

public static bool IsUpper(char c) - Возвращает логическое значение true, если символ с обозначает прописную букву алфавита, а иначе возвращает логическое значение false

public static bool IsUpper(string s,int index) -  Возвращает логическое значение true, если символ, доступный из строки по индексу s [ index], обозначает прописную букву алфавита, а иначе возвращает логическое значение false

public static bool IsWhiteSpace(char c) - Возвращает логическое значение true, если символ с обозначает пробел, табуляцию или пустую строку, а иначе возвращает логическое значение false

public static bool IsWhiteSpace(string s,int index) - Возвращает логическое значение true, если символ, доступный из строки по индексу s[index], обозначает пробел, табуляцию или пустую строку, а иначе возвращает логическое значение false

public static char Parse(string s) - Возвращает эквивалент типа char символа s из строки s. Если строка s состоит из нескольких символов, то генерируется исключение FormatException

public static char ToLower(char c) - Возвращает строчный эквивалент символа с, если он обозначает прописную букву. В противном случае значение символа с не изменяется

public static char ToLower(char  c, Culturelnfo culture) - Возвращает строчный эквивалент символа с, если он обозначает прописную букву. В противном случае значение символа с не изменяется. Преобразование выполняется в соответствии с информацией о культурной среде, указываемой в параметре culture, где Culturelnfo — это класс, определенный в пространстве имен System.Globalization

public static char ToLowerlnvariant(char c) - Возвращает строчный эквивалент символа с независимо от настроек культурной среды

public override string  ToString() - Возвращает строковое представление значения вызывающего объекта типа Char

public static string ToString(char c) - Возвращает строковое представление символьного значения с  

public string ToString(IFormatProvider provider) - Возвращает строковое представление значения вызывающего объекта типа Char с учетом информации о культурной среде, указываемой в параметре provider

public static char ToUpper(char  c) - Возвращает прописной эквивалент символа с, если он обозначает строчную букву. В противном случае значение символа с не изменяется

public static char ToUpper(char i c,Culturelnfo culture) - Возвращает прописной эквивалент символа с, если он обозначает строчную букву. В противном случае значение символа с не изменяется. Преобразование выполняется в соответствии о информацией о культурной среде, указываемой в параметре culture, где Culturelnfo — это класс, определенный в пространстве имен System.Globalization

public static char ToUpperlnvariant(char c) - Возвращает прописной эквивалент символа с независимо от настроек культурной среды

public static bool TryParse(string s,out char result) - Возвращает прописной эквивалент символа с независимо от настроек культурной среды Предпринимает попытку преобразовать символ из строки s в его эквивалентное значение типа char. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true. Если же строка s состоит из нескольких символов, то возвращается логическое значение false, в отличие от метода Parse(), который генерирует исключение при неудачном исходе преобразования

Ниже приведен пример программы, в которой демонстрируется применение нескольких методов, определенных в структуре Char.

// Продемонстрировать применение нескольких методов,
// определенных в структуре Char.
using System;
using System.Globalization;
class CharDemo {
  static void Main() {
    string str = "Это простой тест. $23";
    int i;
    for(i=0; i < str.Length; i++) {
      Console.Write(str[i] + " является");
      if(Char.IsDigit(str[i]))
        Console.Write(" цифрой");
      if(Char.IsLetter(str[i]))
        Console.Write(" буквой");
      if(Char.IsLower(str [i]))
        Console.Write(" строчной");
      if(Char.IsUpper(str[i]))
        Console.Write(" прописной");
      if(Char.IsSymbol(str[i]))
        Console.Write(" символическим знаком");
      if(Char.IsSeparator (str[i]))
        Console.Write(" разделительным");
      if(Char.IsWhiteSpace (str [i]))
        Console.Write(" пробелом");
      if(Char.IsPunctuation(str [i]))
        Console.Write(" знаком препинания");
      Console.WriteLine();
    }
    Console.WriteLine("Исходная строка: " + str);
    // Преобразовать в прописные буквы.
    string newstr = "";
    for(i=0; i < str.Length; i++)
      newstr += Char.ToUpper(str[i], CultureInfo.CurrentCulture);
    Console.WriteLine("После преобразования: " + newstr);
  }
}

Эта программа дает следующий результат.

Э является буквой прописной
т является буквой строчной
о является буквой строчной
 является разделительным пробелом
п является буквой строчной
р является буквой строчной
о является буквой строчной
с является буквой строчной
т является буквой строчной
о является буквой строчной
й является буквой строчной
 является разделительным пробелом
т является буквой строчной
е является буквой строчной
с является буквой строчной
т является буквой строчной
. является знаком препинания
 является разделительным пробелом
$ является символическим знаком
2 является цифрой
3 является цифрой
Исходная строка: Это простой тест. $23
После преобразования: ЭТО ПРОСТОЙ ТЕСТ. $23

Структура Boolean

В структуре Boolean поддерживаются данные типа bool. Методы, определенные в этой структуре, перечислены в табл. 21.10. Кроме того, в ней определены следующие поля.

public static readonly string FalseString
public static readonly string TrueString

В этих полях логические значения true и false содержатся в удобочитаемой форме. Так, если вывести содержимое поля FalseString с помощью метода WriteLine(), то на экране появится строка "False".

В структуре Boolean реализованы следующие интерфейсы: ICompагable, IComparable<bool>, IConvertible и IEquatable<bool>.

Табл. 21.10. Методы, определенные в структуре Boolean

Метод - Назначение

public int CompareTo(bool value) - Сравнивает логическое значение вызывающего объекта со значением параметра value. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если вызывающий объект имеет логическое значение false, а параметр value логическое значение true; и, наконец, положительное значение, если вызывающий объект имеет логическое значение true, а параметр value —логическое значение false

public int CompareTo(object obj) - Сравнивает логическое значение вызывающего объекта со значением параметра obj. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если вызывающий объект имеет логическое значение false, а параметр obj — логическое значение true; и, наконец, положительное значение, если вызывающий объект имеет логическое значение true, а параметр obj — логическое значение false

public bool Equals(bool obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению параметра obj

public override bool Equals(object obj) - Возвращает логическое значение true, если значение вызывающего объекта равно значению параметра obj

public override int GetHashCode() - Возвращает хеш-код для вызывающего объекта

public TypeCode GetTypeCode() - Возвращает значение перечисления TypeCode для структуры Boolean, т.е. TypeCode.Boolean

public static bool Parse(string s) - Возвращает эквивалент типа bool символьной строки s. Если строка s не содержит ни поле Boolean.TrueString, ни поле Boolean.FalseString, то генерируется исключение FormatException, независимо оттого, какими буквами набрано содержимое строки: прописными или строчными

public override string ToString() - Возвращает строковое, представление значения вызывающего объекта, которое должно быть либо значением поля TrueString, либо значением поля FalseString

public string

ToString(IFormatProvider provider) - Возвращает строковое представление значения вызывающего объекта, которое должно быть либо значением поля TrueString, либо значением поля FalseString. При этом параметр provider игнорируется

public static bool TryParse(string s,out bool result) - Предпринимает попытку преобразовать символ из строки s в его эквивалентное значение типа bool. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true. Если же строка s не содержит ни поле Boolean. TrueString, ни поле Boolean. FalseString, то возвращается логическое значение false, независимо от того, какими буквами набрано содержимое строки: прописными или строчными, в отличие от метода Parse(), который генерирует исключение в аналогичной ситуации

Оглавление книги


Генерация: 0.054. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз