C#的类型转换(2)之装箱拆箱和Nullable

装箱(把值类型转换成引用类型)与拆箱(把引用类型转换成值类型)
装箱是把值从栈中拿出来放在堆上,再把值对应的索引号放入栈中
拆箱是从栈中申请内存然后把堆中的值放如到申请的栈空间中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //隐式转换
            int i = 1;
            long l = i;
            C1 c1= new C2();//小范围向大范围转换

            //显式转换---大范围向小的范围转换,或者说基类向子类
            double d = 10.05;
            int iFromD = (int)d;

            //无法进行转换,使用处理异常:这个例子只是为了说明基类向子类转换的实例
            C1 c11 = new C1();
            try
            {
                C2 c2 = (C2)c11;
            }
            catch(Exception e) {
                Console.WriteLine(e.Message);
            }

            //整型转换成string类型
            string sFromI =i.ToString();
            //string转换成整数类型:方法一
            int iFromS = Convert.ToInt32("100");
            //方法二
            int iFromS2 = Int32.Parse("101");
            //方法三
            int iFromS3;
            bool succeed = Int32.TryParse("jikexueyuan",out iFromS3);
            Console.WriteLine(iFromS);
            Console.WriteLine(iFromS2);
            Console.WriteLine(iFromS3);

            //装箱(把值类型转换成引用类型)与拆箱(把引用类型转换成值类型)
            int iToBoxing = 100;
            object iBoxed = iToBoxing;
            //拆箱--
            int iUnboxing = (int)iBoxed;
            object nullObject = 5;//为空则出错即5不能为null
            int isNull = (int)nullObject;
            //可为空的int
            int? iNullable = 100;//相当于
            System.Nullable<int> iNullable2=100;
            Console.WriteLine(iNullable.Value);

            //报错
            //int? iNullable3 = null;
            //Console.WriteLine(iNullable3.Value);
            //正确方法为以下
            int? iNullable3 = null;
            Console.WriteLine(iNullable3.HasValue);
            //或者直接用下一句
            Console.WriteLine(iNullable3.GetValueOrDefault());

            //下面是双问号的作用:如果iNullable3为空的话,被复为后面的值。不为空的话
            //显示前面的值
            int iii = iNullable3 ?? 500;
            Console.WriteLine(iii);

            int iii1 = iNullable ?? 500;
            Console.WriteLine(iii1);

            Console.ReadLine();

        }
    }
    class C1 { }
    class C2 : C1 { }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值