Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Распаковка-преобразование6

Распаковка является явным преобразованием из типа object в тип значения или из типа интерфейса в тип значения, его реализующее. Операция распаковки состоит из следующих действий.

  • Проверка экземпляра объекта на то, что он является упакованным значением заданного типа значения.

  • Копирование значения из экземпляра в переменную типа-значения.

В следующих операторах показаны операции по упаковке и распаковке.

int i = 123; // a value type

object o = i; // boxing

int j = (int)o; // unboxing

На следующем рисунке представлен результат выполнения предыдущих операторов.

Распаковка-преобразование

Для успешной распаковки типов значений во время выполнения необходимо, чтобы экземпляр, который распаковывается, был ссылкой на объект, предварительно созданный с помощью упаковки экземпляра этого типа значения. Попытка распаковать null или ссылку в несовместимый тип значения вызовет InvalidCastException.

Description

The following example demonstrates a case of invalid unboxing and the resulting InvalidCastException. Using try and catch, an error message is displayed when the error occurs.

Example

class TestUnboxing

{

static void Main()

{

int i = 123;

object o = i; // implicit boxing

try

{

int j = (short)o; // attempt to unbox

System.Console.WriteLine("Unboxing OK.");

}

catch (System.InvalidCastException e)

{

System.Console.WriteLine("{0} Error: Incorrect unboxing.", e.Message);

}

}

}

Output

Specified cast is not valid. Error: Incorrect unboxing.

If you change the statement:

int j = (short) o;

to:

int j = (int) o;

the conversion will be performed, and you will get the output:

Unboxing OK.

Описание7

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

Пример

class TestUnboxing

{

static void Main()

{

int i = 123;

object o = i; // implicit boxing

try

{

int j = (short)o; // attempt to unbox

System.Console.WriteLine("Unboxing OK.");

}

catch (System.InvalidCastException e)

{

System.Console.WriteLine("{0} Error: Incorrect unboxing.", e.Message);

}

}

}

Результат

Specified cast is not valid. Error: Incorrect unboxing.

При изменении оператора

int j = (short) o;

на

int j = (int) o;

будет выполнено преобразование со следующим результатом.

Unboxing OK.

How to: Convert a byte Array to an int

This example shows you how to use the BitConverter class to convert an array of bytes to an int and back to an array of bytes. You may have to convert from bytes to a built-in data type after you read bytes off the network, for example. In addition to the ToInt32(array<Byte>[]()[], Int32) method in the example, the following table lists methods in the BitConverter class that convert bytes (from an array of bytes) to other built-in types.

Type returned

Method

bool

ToBoolean(array<Byte>[]()[], Int32)

char

ToChar(array<Byte>[]()[], Int32)

double

ToDouble(array<Byte>[]()[], Int32)

short

ToInt16(array<Byte>[]()[], Int32)

int

ToInt32(array<Byte>[]()[], Int32)

long

ToInt64(array<Byte>[]()[], Int32)

float

ToSingle(array<Byte>[]()[], Int32)

ushort

ToUInt16(array<Byte>[]()[], Int32)

uint

ToUInt32(array<Byte>[]()[], Int32)

ulong

ToUInt64(array<Byte>[]()[], Int32)