变量的更多内容-类型转换-使用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;
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();
        }
    }
}
posted @ 2009-03-26 20:48    阅读(554)  评论(0编辑  收藏  举报