c# 数据的转换操作

来源:互联网 发布:mui.picker.js 编辑:程序博客网 时间:2024/05/16 04:47

 1、转换的类型

预定义的转换:数字转换(显式转换,隐式转换),引用转换(显式转换,隐式转换),装箱转换,拆箱转换

用户自定义的转换: 隐式转换,显示转换

2、隐式/显示转换(强制转换)的适用情况

       对于预定义的类型,若从源类型到目标类型不会发生数据丢失,c#会自动将一个数据类型转换为另一个数据类型,这种转换就是隐式转换。

      若源类型的任意值在被转换成目标类型时会丢失值,c#不会提供这两种类型的自动转换,如果希望对这样的类型进行转换,就必须使用显式转换,

其语法格式为 (目标类型)源表达式

3、引用转换

(1)定义:接收源引用并返回一个指向堆中同一个位置的应用,但把引用标记为其他类型

(2)常见的隐式引用转换

        所有引用类型可被隐式转换成object类型

       任何类型可以隐式转换到它继承的接口

       类可以隐式转换到它继承的链中的任何类,可以隐式转换到它实现的任何接口

(3)常见的显式引用转换(一个泛化引用类型转换到一个更具体的引用类型时发生)

       从object类型到任何引用类型的转换

     从基类到其子类的转换

4、装箱转换----值类型到引用类型的隐式转换

  示例:int i=12;   object oi=null;         oi=i;//对i装箱,并把引用赋值给oi

 系统对i进行装箱的操作如下:@1,在堆上创建了int 类型的对象。@2,将i的值复制到int对象。@3,返回int对象的引用,并保存到oi中。

5、拆箱转换-----把装箱后的对象转回值类型的显式转换

      int i=12; object oi=i;//装箱i并把其引用赋值给oi

    int j=(int)oi;//拆箱oi并把其对象的值赋值给j。尝试拆箱一个值为非原始类型时,会抛出一个InvalidCastException异常

6、用户自定义转换

  语法:public static  implicit/explicit operator  TargetType (SourceType  Identifier)

 例如: public static implicit operator string(Number n)
       {
              return n.ToString();
       }

          @1、public static 是必需的,implicit,explicit分别表明为隐式或显式转换   operator为关键字。

          @2、只可以为类或结构定义用户自定义转换

          @3、不能重新定义标准隐式或显式转换

7、Is运算符-----检查转换是否成功

     有些转换的请求是不成功的,并会在运行时抛出InvalidCastException异常。我们可用Is运算符检查转换是否成功,从而避免盲目转换

     语法:   源表达式 is  目标类型

     若源表达式可以通过引用,装箱,拆箱转换 转换成目标类型,则运算符返回true。

8、as运算符-----类似于显式转换的功能

      as运算符和强制转换运算符相似,只是它不抛出异常,若转换失败,它把目标引用设为null

      语法: 源表达式  as  目标类型(必须为引用类型)

      只能用于引用转换和装箱转换