Имеется такой код:
object o = 5;
// ...
byte b = (byte)o;
Сначала создается объект с числовым значением (и только числовым). Через его свойство GetType() видно, что ему был присвоен тип Int32.
Через некоторое время в программе надо из этого объекта сделать тип byte. Компилятор ругается на такое приведение.
Как обойти?
PS: задаваемое числовое значение входит в границы типа byte.
Компилятор вроде не должен ругаться, должно возникать исключение на этапе исполнения.
Что бы его обойти приводи следующим образом.
byte b = (byte)(int)o;
Здравствуйте, Аноним, Вы писали:
А>Имеется такой код:
А>А>object o = 5;
А>// ...
А>byte b = (byte)o;
А>
А>Сначала создается объект с числовым значением (и только числовым). Через его свойство GetType() видно, что ему был присвоен тип Int32.
А>Через некоторое время в программе надо из этого объекта сделать тип byte. Компилятор ругается на такое приведение. Как обойти?
А>PS: задаваемое числовое значение входит в границы типа byte.
ты сначала должен привести к базовому типу, который был до упаковки, а потом к которому хочешь.
byte b = (byte)(int)o;
см. метод Convert.ToByte
Здравствуйте, Аноним, Вы писали:
А>Как обойти?
Попробуйте так:
using System;
class Program
{
static void Main()
{
object o = 5; // или 5L, или 5UL ...
byte b = ((IConvertible)o).ToByte(null);
}
}