您的位置:首页 > 其它

二十五:Char实例与各种数值类型相互转换的三种技术实现

2009-02-03 20:49 615 查看
以下按性能顺序列出了三种可实现方法:

(一)强制类型转换:这是最简单也是效率最高的方法,因为编译器会生成中间语言指令来执行转换,不必调用任何方法。有的语言(比如C#)允许指定在执行转换时是使用checked还是unchecked。

(二)使用Convert类型:System.Convert类型提供了几个静态方法来实现Char和数值类型之间的相互转换,这些方法都是以checked方式来执行的。所以一旦发现转换会造成数据丢失,就会抛出一个OverflowException异常。

(三)使用IConvertible接口:Char类型和FCL中的所有数值类型都实现了IConvertible接口,该类型定义了像ToUInt32和ToChar这样的方法,这种方法的效率最差,因为在值类型了调用一个接口方法,要求对实例执行装箱——Char和所有数值类型都发球值类型。假如某个类型不能转换(比如将Char转换成Boolean),或者转换将造成数据丢失,IConvertible的方法会抛出一个System.InvalidCastException异常。许多类型(包括FCL的Char和数值类型)都将IConvertible的方法实现为显式接口成员,这意味着在调用接口的任何一个方法之前,都必须将实例显式转型为一个IConvertible。IConvertible的所有方法(GetTypeCode除外)都要获取一个特殊的对象引用作为参数,该对象实现了IFormatProvider接口。执行大多数转换时,都可以将这个参数传递为null。

以下代码演示了如何运用这三种技术:

using System;

public sealed class Program

{

public static void Main()

{

Char c;

Int32 n;

//使用强制类型转换

c = (Char)65;

Console.WriteLine(c); //显示A

n = (Int32)c;

Console.WriteLine(n); //显示65

c = unchecked((Char)(65536 + 65));

Console.WriteLine(c); //显示A

//使用Convert类型实现

c = Convert.ToChar(65);

Console.WriteLine(c); //显示A

n = Convert.ToInt32(c);

Console.WriteLine(n); //显示65

//演示Convert的范围检查

try

{

c = Convert.ToChar(70000);

Console.WriteLine(c); //不执行

}

catch (OverflowException)

{

Console.WriteLine("Can't convert 70000 to Char ! ");

}

//使用IConvertible接口实现

c = ((IConvertible)65).ToChar(null);

Console.WriteLine(c); //显示A

n = ((IConvertible)c).ToInt32(null);

Console.WriteLine(n); //显示65

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: