在大部分情况下,当需要对FCL提供的类型进行转型时,都应该使用FCL提供的转型方法。

1、使用类型的转换运算符。

2、使用类型内置的Parse、TryParse、或者如ToString、ToDouble和ToDateTime等方法。

3、使用帮助类提供的方法。

4、使用CLR支持的转型。

下面分别对这些方法进行说明。

1、使用类型的转换运算符。

使用类型的转换运算符,其实就是使用类型内部的一个方法。转换运算符分为两类:隐式转换和显示转换。基元类型普遍提供了转换运算符,如:

int i=0;
float j=0;
j=i;//隐式转换
i=(int)j;//显示转换

注意:所谓“基元类型”,是指编译器直接支持的数据类型,即直接映射到FCL中的类型。包括sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、bool、decimal、object、string。

2、使用类型内置的Parse、TryParse、或者如ToString、ToDouble和ToDateTime等方法。

在FCl中,如果某个类型经常需要进行转型操作,类型自身则会带有一些转型方法。比如从string转型为int,因为经常发生,所以int本身就提供了Parse和TryParse方法。

3、使用帮助类提供的方法。

可以使用如System.Convert类、System.BitConverter类来进行类型的转换。

System.Convert提供了一个将基元类型转换为其他基元类型的方法,如ToChar、ToBoolean方法等。

值得一提的是,System.Convert还支持将任何自定义类型转换为任意基元类型,只要自定义类型继承

了IConvertible接口就可以。代码如下:

class Ip : IConvertible
{
   public bool ToBoolean(IFormatProvider provider)
   {
      throw new InvalidCastException("Ip-to-Boolean conversion is not supported");
   }
 
   public string ToString(IFormatProvider provider)
   {
     return value.ToString();
   }
}
继承IConvertible接口必须同时实现其他转型方法,如ToBoolean。

System.BitConverter类提供了基元类型与字节数组之间相互转换的方法。

4、使用CLR支持的转型。

CLR支持的转型,即上溯转型和下溯转型。实际上就是基类和子类之间的相互转换。

Animal animal;
Dog dog=new Dog();
animal=dog;        //隐式转换
//dog=animal;       //编译不通过
dog=(dog)animal;   //显示转换