C#学习记录——使用Convert命令进行显示转换

发布于:2022-12-05 ⋅ 阅读:(497) ⋅ 点赞:(0)

使用Convert命令进行显示转换

今天阅读《C#入门经典》第5版,边学习边记录。

Convert命令可进行显示转换汇总

命令 结果
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.ToSinggle(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(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("阿雷2022 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。

这个转换过程初看起来比较复杂,但只要按照运算符的优先级,把表达式分解为不同的部分,就可以弄明白这个过程。


网站公告

今日签到

点亮在社区的每一天
去签到