2006-11-21

C#.NET 中的类型转换

来源: 本站收集整理 作者:佚名 评论 0 条
  d.ToString() "n"); this.textBox1.AppendText("float e = " e.ToString() "n"); this.textBox1.AppendText("double f = " f.ToString() "n"); }

  译顺利通过,运行结果是各变量的值均为 1;当然,它们的类型分别还是 System.Byte 型……System.Double 型。现在我们来试试,假如把赋值的顺序反过来会怎么样呢?在 TestBasic() 函数中追加如下语句:

int g = 1;
short h = g;
this.textBox1.AppendText("h = " h.ToString() "n");

  结果编译报错:
  G:ProjectsVisual C#ConvertForm1.cs(118): 无法将类型“int”隐式转换为“short”
  其中,Form1.cs 的 118 行即 short h = g 所在行。

  这个时候,假如我们坚持要进行转换,就应该使用强制类型转换,这在 C 语言中常有提及,就是使用“(类型名) 变量名”形式的语句来对数据进行强制转换。如上例修改如下:

short g = 1;
byte h = (byte) g; // 将 short 型的 g 的值强制转换成 short 型后再赋给变量 h
this.textBox1.AppendText("h = " h.ToString() "n");

  编译通过,运行结果输出了 h = 1,转换成功。
  但是,假如我们使用强制转换,就不得不再考虑一个问题:short 型的范围是 -32768 ~ 23767,而 byte 型的范围是 0 ~ 255,那么,假如变量 g 的大小超过了 byte 型的范围又会出现什么样的情况呢?我们不妨再一次改写代码,将值改为 265,比 255 大 10

short g = 265; //265 = 255 10
byte h = (byte) g;
this.textBox1.AppendText("h = " h.ToString() "n");

  编译没有出错,运行结果却不是 h = 265,而是 h = 9。
因此,我们在进行转换的时候,应当注重被转换的数据不能超出目标类型的范围。这不仅体现在多字节数据类型(相对,如上例的 short) 转换为少字节类型(相对,如上例的 byte) 时,也体现在字节数相同的有符号类型和无符号类型之间,如将 byte 的 129 转换为 sbyte 就会溢出。这方面的例子大同小异,就不具体说明了。

3. 字符的 ASCII 码和 Unicode 码

  很多时候我们需要得到一个英文字符的 ASCII 码,或者一个汉字字符的 Unicode 码,或者从相关的编码查询它是哪一个字符的编码。很多人,尤其是从 VB 程序序转过来学 C# 的人,会报怨 C# 里为什么没有提供现成的函数来做这个事情——因为在 VB 中有 Asc() 函数和 Chr() 函数用于这类转换。
但是假如你学过 C,你就会清楚,我们只需要将英文字符型数据强制转换成合适的数值型数据,就可以得到相应的 ASCII 码;反之,假如将一个合适的数值型数据强制转换成字符型数据,就可以得到相应的字符。
共10页: 上一页 [1] [2] 3 [4] [5] [6] [7] [8] [9] [10] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:登陆页优化的七大规则  
下一篇:ASP.NET 2.0高级数据处理之主从数据表
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号