C#的类型转换

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// 1.C# 的隐式和显式转换
///2.C# 通过 Method 进行类型转换
///3.C# 的装箱拆箱和 Nullable 类型
/// </summary>
namespace lesson5
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 10;
            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);
            }//异常处理程序
            Console.WriteLine(c11 is C1);
            Console.WriteLine(c11 is C2);

            C2 c22 = c11 as C2;//这里先做了强制转换,然后发现不能就赋值  null, 适用于 非空 和 引用类型
            //对比异常抛出机制不消耗资源
            Console.WriteLine(c22 == null);

            //int iAs="5" as int;
            int i2 = 1;
            string sFromi = i2.ToString();//通过方法进行转换
            //如果想要string转换int 则需要调用Convert这个类
            int iFroms = Convert.ToInt32("100");
            int iFroms2 = Int32.Parse("101");
            //为了避免处理这种输入格式不对的异常,常用
            int iFroms3;
            bool succeed = Int32.TryParse("iloveunity", out iFroms3);
            Console.WriteLine(iFroms3);//没成功输出0
            //继承IConventible ,TypeConventer实现自己类型的转换

            //装箱和拆箱 装箱时将值类型转变为一个引用类型 拆箱则相反
            int iToBoxing = 100;
            object iboxed = iToBoxing;//装箱就是一个隐式转换
            int iUnboxing = (int)iboxed;//显示转换就是一个拆箱 ,可能会有数据丢失,出错
            object NullObject = null;

            // int iNull = (int)NullObject; 这里有一个报错
            //较为消耗资源
            int? iNullable = 100;
            System.Nullable<int> inullable2 = 100;
            //上面两句话完全等价
            Console.WriteLine(iNullable.Value);
            iNullable = null;
            Console.WriteLine(iNullable.HasValue);
            Console.WriteLine(iNullable.GetValueOrDefault());//为空返回0
            Console.WriteLine(inullable2.GetValueOrDefault());
            int iii = iNullable ?? 500;//如果iNullable为空 赋值iii为后面数值 不为空前面
            Console.WriteLine(iFromD);
            Console.ReadLine();
        }
    }
    class C1 { }

    class C2 : C1 { }
}

猜你喜欢

转载自xuyi1994.iteye.com/blog/2230305