使用Convert命令进行显示转换
今天阅读《C#入门经典》第5版,边学习边记录。
Convert命令可进行显示转换汇总
其中val可以是大多数变量类型(如果这些命令不能处理该类型的变量,编译器就会告诉你)。
如上表所示,转换的名称略不同于C#类型名称,例如,要转换为int,应使用Convert.ToInt32(val)。这是因为这些命令来自于.NET Framework的System名称空间,而不是本机C#本身。这样他们就可以在除C#以外的其他.NET兼容语言中使用。
对于这些转换要注意的一个问题是,他们总是要进行溢出检查,checkd和uncheckd关键字以及项目属性设置不起作用。
类型转换练习
下面示例包括许多类型转换。它声明和初始化许多不同类型的变量,再在它们之间进行隐式和显示转换。
(1)代码如下:
using System;namespace L004_ConsoleApp1{class Program{static void Main(string[] args){short shortResult, shortVal = 5;int integerVal = 45;long longResult;float floatVal = 20.5F;double doubleResult, doubleVal = 88.888;string stringResult, stringVal = "26";bool boolVal = true;Console.WriteLine("阿雷 Variable Conversion Examples\n");doubleResult = floatVal * shortVal;Console.WriteLine("Implicit,->double:{0}*{1}->{2}", floatVal, shortVal, doubleResult);shortResult = (short)floatVal;Console.WriteLine("Explicit,->short:{0}->{1}", floatVal, shortResult);stringResult = Convert.ToString(boolVal) + Convert.ToString(doubleVal);Console.WriteLine("Explicit,->string:\"{0}\"+\"{1}\"->{2}", boolVal, doubleVal, stringResult);longResult = integerVal + Convert.ToInt64(stringVal);Console.WriteLine("Mixed,->long:{0}+{1}->{2}", integerVal, stringVal, longResult);Console.ReadKey();}}}
(2)执行代码,结果如下图所示:
示例说明
这个示例包含多种转换类型,既有简单赋值,也有在表达式中进行的转换。必须考虑这两种情况,因为每一个非一元运算符的处理都可能要进行类型转换,而不仅仅是赋值运算符。例如:
floatVal * shortVal
其中把一个short值与一个float值相乘。在这样的指令中,没有指定显示转换,应在可能的情况下进行隐式转换。在这个示例中,唯一有意义的隐式转换是把short值转换为float(因为把float值转换为short需要显示转换),所以这里使用隐式转换。
也可以重新编写这个过程,使用下述代码:
shortVal*(short)floatVal
这并不表示两个short相乘的结果将返回一个short值。因为这个操作很可能大于32767(这是short可以包含的最大值),所以这个操作的结果实际上是int。
使用这个数据类型转换语法执行显式转换,其运算符的优先级与其他一元运算符一样,都是优先级中的最高级,如++(用作前缀)。
如果语句涉及混合类型,就根据运算符的优先级,在处理每个运算符时执行转换。这意味着可能出现“中间”转换,例如:
doubleResult = floatVal + (shortVal * floatVal);
要处理的第一个运算符是*,如上所示,它把shortVal转换为float。接着处理+运算符,它不需要进行任何转换,因为这是把两个float值相加。在最后处理=运算符时,这个计算的float结果转换为double。
这个转换过程初看起来比较复杂,但只要按照运算符的优先级,把表达式分解为不同的部分,就可以弄明白这个过程。