变量的更多内容-类型转换-使用Convert
很多例子中使用的显式类型转换,与前面有一些区别。前面使用Convert.ToDouble()等命令把字符串值转换为数值,显然,这种方式不适合于所有的字符串。
例如,如果使用Convert.ToDouble()把字符串Number转换为一个double值,执行代码就会出错。为了成功执行这种类型的转换,所提供的字符串必须是数值的有效表达方式,该数还必须是不会溢出的数,数值的有效表达式是:首先一个可选符号(加号或减号),然后是0位或多位数字,一个圆点后跟一位或多位数字,接着是一个可选的e或E,句点后跟一个可选符号和一位或多位数字(在这个序列之前或之后)和空格。利用这些可选的额外数据,就可以看出-1.2451e-24这样复杂的字符串是一个数值。
以这种方式可以进行许多显式转换,如下所示:
Convert.ToBoolean(val) val转换为bool
Convert.ToByte(val) val转换为byte
Convert..ToChar(val) val转换为char
Convert.ToDecimal(val) val转换为decimal
Convert.ToDouble(val) val转换为double
Convert.ToInt16(val) val转换为short
Convert.ToInt32(val) val转换为int
Convert.ToInt64(val) val转换为long
Convert.ToSByte(val) val转换为sbyte
Convert.ToSingle(val) val转换为float
Convert.ToString(val) val转换为string
Convert.ToUInt16(val) val转换为ushort
Convert.ToUInt32(val) val转换为uint
Convert.ToUInt64(val) val转换为ulong
其中val可以是各种类型的变量(如果这些命令不能处理该类型的变量,编译器就会告诉用户)。
但如上所述,转换的名称略不同于C#类型名称,例如,要转换为int,应使用Convert.ToInt32()。这是因为这些命令来自于.NET Framework的System命名空间,而不是C#本身。这样它们就可以除C#以外的其他.NET兼容语言中使用。
对于这些转换要注意一个问题,它们总是要进行溢出检查,checked和unchecked关键字以及项目属性设置没有什么作用。
做一个例子。它声明和初始化许多不同类型的变量,再在它们之间进行隐式和显式转换。
using System.Collections.Generic;
using System.Text;
namespace 数据类型转换
{
class Program
{
static void Main(string[] args)
{
short shortResult, shortVal = 4;
int integerVal = 67;
long longResult;
float floatVal = 10.5F;
double doubleResult, doubleVal = 99.999;
string stringResult, stringVal = "17";
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.ToSingle(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();
}
}
}