<C#入门经典>学习笔记3之类型转换与枚举

来源:互联网 发布:优绘下载 mac版 编辑:程序博客网 时间:2024/05/01 11:42

变量类型转换

一般情况下,不同类型的变量使用不同的模式来表示数据,需要对数据进行类型转换,分为隐式转换和显式转换。

隐式转换

定义
从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。
操作
不需要做任何工作,也不需要另外编写代码 Var1 = Var2
规则
任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。(参考学习笔记1中的变量定义范围)

bool和string没有隐式转换,但数值类型有隐式转换(char存储的是数值,所以char被当作一个数值类型)

显式转换

定义
从类型A到类型B的转换只能在某些情况下进行,转换的规则比较复杂,应进行某种类型的处理
操作
1、强制转换就是强迫数据从一种类型转换为另一种类型,其语法比较简单 。 如

     (byte) Var1;


当需要显示地把一种数据类型转换为另一种数据类型时,最好能够了解是否有数据丢失了。若不知道,可能发生严重的问题。方法如下:
1)简单地检查源变量的值,把它与目标变量的取值范围进行比较
2)迫使系统特别注意运行期间的转换。使用关键字checked和unchecked,称为表达式的溢出检查上下文,如:

    short shortResult    float floatVal = 10.5;    shortResult = checked((short)floatVal);

3)配置应用程序,让这种类型的表达式都包含checked关键字,除非表达式明确使用unchecked关键字。
2.使用Convert命令进行显示转换
1)Conver.ToXXX()的命令是把字符串转换为数据,字符串必须是数值的有效表达方式,该数还必须是不会溢出的数。
2)数值的有效表达方式:首先是一个可选符号(+或者-),然后是0位或多位数字,一个句点后跟一位或多位数值,接着是一个可选的e或E,后跟一个可选符号和一位或者多位数字(在这个序列之前或之后)和空格。例:-1.2451e-24
3)convert命令:
这里写图片描述

1)它们总是进行溢出检查,checked和unchecked关键字以及项目属性设置不起作用。
2)若需转换成int型,使用Convert.ToInt32().(它们就可以在除C#以外的其它.NET兼容语言中使用)
3)类型转换的优先级与其他一元运算符一样,都是优先级中的最高级

枚举

它们允许定义一个类型,其中包含提供的限定值集合中的某一个值。
定义
可以使用关键字enum来定义枚举

    enum <typeName>:<underlyingType>    {        <value1>,        <value2>,        <value3>,        ...        <valuen>    }

说明
1、枚举使用一个基本类型(underlyingType)来存储。枚举类型可以提取的每个值都存储为该基本类型的一个值,默认情况下该类型为int.
2、枚举的基本类型可以是byte、sbyte,short,ushort,int,uint,long,ulong.
3、默认情况下,每个值都会根据定义的顺序(从0开始),自动赋给对应的基本类型值。若中间某一枚举值已被初始化,那么此值可以作为另一枚举的基础值,没有被赋值的任何值都会自动获取一个初始值。
示例1

namespace{    enum orientation : byte    {        north = 1,        south = 2,        east = 3,        west = 4    }    class Program    {         static void Main()         {            byte directionByte;            orientation myDirection = orientation .north;            directionByte = (byte)myDirection;         }    }}

*注*
1)类型定义代码需放在名称空间中。
2)即使枚举的基本类型是byte,仍需将枚举型转换成基本类型byte,若要将byte类型转换为orientation,同样也需要转换。如:

myDirection = (orientation)directionByte;

3)不是所有byte类型的值都可以映射成已定义的枚举值,需与定义相符。
示例2

namespace{    enum orientation : byte    {        north = 1,        south = 2,        east = 3,        west = 4    }    class Program    {         static void Main()         {            string directionString;            orientation myDirection = orientation .north;            directionString= Convert.ToString(myDirection);         }    }}

*注*
1)不能使用(string)强制类型转换,但可以使用变量本身的ToString()命令,如:

    directionString = myDirection.ToString();

2)可以将String转换为枚举值,需用关键字Enum.Parse,如:

    string mystring = “north”;    orientation myDirection = (orientation)Enum.Parse(typeof(orientation),mystring);

3)并非所有的字符串值都会映射为一个枚举值,若传送的值不是枚举值中的一个(区分大小写),就会产生错误。

0 0
原创粉丝点击