关闭

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

标签: C#类型转换装箱拆箱和Nullable
201人阅读 评论(0) 收藏 举报
分类:
装箱(把值类型转换成引用类型)与拆箱(把引用类型转换成值类型)
装箱是把值从栈中拿出来放在堆上,再把值对应的索引号放入栈中
拆箱是从栈中申请内存然后把堆中的值放如到申请的栈空间中。

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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:59150次
    • 积分:1387
    • 等级:
    • 排名:千里之外
    • 原创:73篇
    • 转载:12篇
    • 译文:0篇
    • 评论:25条
    最新评论