显示转换可能会丢失数据并且不能在目标类型中同等地表示源值,对于整数类型,C#给我们提供了选择运行时是否应该在进行类型转换时检测结果溢出的能力,这将通过checked运算符和checked语句来实现,如果我们指定一个表达式或一段代码为checked,CLR会在转换产生溢出时抛出一个OverflowException异常,如果代码不是checked,转换会继续而不管是否产生溢出。
checked、unchecked运算符:
class Program
{
static void Main(string[] args)
{
ushort sh = 2000;
byte sb;
sb = unchecked((byte)sh);
Console.WriteLine(sb); //208
sb = checked((byte)sh); //此处抛出异常
}
}
checked、unchecked语句:
class Program
{
static void Main(string[] args)
{
ushort sh = 2000;
byte sb;
unchecked
{
sb = ((byte)sh);
Console.WriteLine(sb); //208
}
checked
{
sb = checked((byte)sh); //此处抛出异常
}
}
}