zoukankan      html  css  js  c++  java
  • C#类型转换

    C#类型转换的可能情况

    1. 值类型间的传统强制类型转换,(type)变量名

    2. 使用as的安全类型转换

    3. 派生类转基类,隐式转换;基类转派生类,显式转换

    4. 值类型转引用类型,称为装箱;引用类型转值类型,称为拆箱

    5. 从低精度的数值类型到高精度的数值类型的转换,隐式数值转换

    6. 基本类型之间,使用Convert类实现类型转换

    7. 字符串类型转换成任意类型,使用Parse方法

    (type)变量名

    传统不安全的强制类型转换

    Object obj1 = new NewType();			//第一种:不安全
    NewType newValue = (NewType)obj1;
    
    Object obj1 = new NewType();		  //第二种:不高效
    NewType newValue = null;
    try
    {
    	newValue = (NewType)obj1;
    }
    catch (Exception err)
    {
    	MessageBox.Show(err.Message);
    }	
    

    as+类型

    安全高效的类型转换

    Object obj1 = new NewType();
    NewType newValue = obj1 as NewType;
    

    ​ 当需要转化对象的类型属于转换目标类型,或者转换目标类型的派生类型时,才能成功,当不成功的时候,会返回null,所以使用前需判是否为null检查转换成功与否,直接使用将抛出异常

    • 无法应用于值类型转换(因为值类型不能为null)
    • 无法应用于自定义类型间转换

    Is+类型

    检查对象是否与给定的类型兼容

    Object obj1 = 10;
    if(obj1 is int )
    {
    	int num = (int)obj1;
    }
    

    ​ 若对象引用是null,is运算符总是返回false,因为没有可检查其类型的对象。

    • Object => 已知引用类型——使用as操作符完成
    • Object => 已知值类型——先使用is操作符来进行判断,再用类型强转换方式进行转换

    装箱与拆箱

    装箱步骤

    1. 在托管堆中分配内存,除了分配值类型各个字段所需内存,还要加上托管堆所有对象都有的两个额外成员(类型对象指针和同步索引块)所需的内存
    2. 将值类型的字段复制到新分配的堆内存中
    3. 返回对象地址,即对象的引用

    拆箱步骤

    1. 获取对象各个字段的地址
    2. 将各个字段的值从托管堆上复制到线程栈新的值类型实例

    Convert

    一般格式

     convert.To数据类型(变量名);
    

    常用的convert类型转换方法

    方法 解释
    Convert.ToInt16() 转换为整型(short)
    Convert.ToInt32() 转换为整型(int)
    Convert.ToInt64() 转换为整型(long)
    Convert.ToChar() 转换为字符型(char)
    Convert.ToString() 转换为字符串型(string)
    Convert.ToDateTime() 转换为日期型(datetime)
    Convert.ToDouble() 转换为双精度浮点型(double)
    Conert.ToSingle() 转换为单精度浮点型(float)

    字符串与其他类型的转换

    其他类型转为字符串,使用

    变量名.ToString();
    

    字符串转换为其他类型

    数据类型.Parse(字符串类型的值);
    

    note:

    当多于一个字符的字符串用Parse转换为char类型时,会抛出异常

    当不是数字的字符串用Parse转换为int类型时,会抛出异常

    示范

    //ToString
    int i = 10;
    string str = i.ToString();
    Console.Write(str);
    //输出:10
    
    //Parse
    char i = char.Parse("h");
    Console.Write(i);
    //输出:h
    int i = int.Parse("21");
    Console.Write(i);
    //输出:21
    
  • 相关阅读:
    Silverlight生命周期概述
    NVolecity 处理DataTable 小记
    Adobe CS6 安装的时候,安装到AdobeHelp 死掉的解决方法
    验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate 的解决办法
    为什么要写博客
    [原创]SQL发音考证(搜寻SQL86标准)
    [转载]《暗时间》:为什么你应该(从现在开始就)写博客
    [转载]《暗时间》:书写是为了更好的思考
    [原创]手把手教你写网络爬虫(1):网易云音乐歌单
    javascript简单的日历实现《转》
  • 原文地址:https://www.cnblogs.com/AMzz/p/13563292.html
Copyright © 2011-2022 走看看