C# 第一章『基础』◆第6节:类型转换

         由于 C# 是在编译时静态类型化的,因此变量在声明后就无法再次声明,或无法分配另一种类型的值,除非该类型可以隐式转换为变量的类型。 例如,string 无法隐式转换为 int。 因此,在将 i 声明为 int 后,无法将字符串“Hello”分配给它,如以下代码所示:

int i;

// error CS0029: Cannot implicitly convert type 'string' to 'int'
i = "Hello";

        但有时可能需要将值复制到其他类型的变量或方法参数中。 例如,可能需要将一个整数变量传递给参数类型化为 double 的方法。 或者可能需要将类变量分配给接口类型的变量。 这些类型的操作称为类型转换。 在 C# 中,可以执行以下几种类型的转换:

        ① 隐式转换

        由于这种转换始终会成功且不会导致数据丢失,因此无需使用任何特殊语法。 示例包括从较小整数类型到较大整数类型的转换以及从派生类到基类的转换。

        隐式类型转换是不需要声明就能进行的转换,在进行隐式转换时,编译器不需要检查就能自动进行转换。下列基本数据类型会涉及数据转换(不包括逻辑类型),这些类型按精度从低到高的顺序为byte→short→int→long→float→double,其中char类型比较特殊,它可以与部分int类型数字兼容且不会发生精度变化。

int i =123;
long j =i;
//隐式转换
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 20;
            int b = 6;
            double x = a / b;
            Console.WriteLine(x);
            Console.WriteLine("{0:0.00}", x);
            double y = a * 1.0 / b;
            Console.WriteLine("{0:0.000}", y);
            Console.ReadKey();
        }
    }
}
//输出结果为:
//3
//3.00
//3.333

        ②显式类型转换

        显式转换(强制转换) :必须使用强制转换表达式,才能执行显式转换。 在转换中可能丢失信息时或在出于其他原因转换可能不成功时,必须进行强制转换。 典型的示例包括从数值到精度较低或范围较小的类型的转换和从基类实例到派生类的转换。

        显式类型转换也称为强制类型转换,它需要在代码中明确地声明要转换的类型。如果要把高精度的变量转换为低精度的变量,就需要使用显式类型转换。

        显式类型转换的一般形式为:(类型说明符)表达式

        其功能就是把表达式的运算结果强制转换为类型说明符说表示的类型。

int i;
i= (int)6.6;
//显式转换(强制转换)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            double a = 66.538;
            int b = (int)a;
            Console.WriteLine(b);
            Console.ReadKey();
        }
    }
}
//输出结果为:66

        ③Convert类:

        使用帮助程序类进行转换:若要在非兼容类型(如整数和 System.DateTime 对象,或十六进制字符串和字节数组)之间转换,可使用 System.BitConverter 类、System.Convert 类和内置数值类型的 Parse 方法(如 Int32.Parse)。

        Convert类型转换:将一个基本数据类型转换为另一个基本数据类型。

        Convert 方法是数据类型转换中最灵活的方法,它能够将任意数据类型的值转换成任意数据类型,前提是不要超出指定数据类型的范围。

方法 说明
Convert.ToBoolean() 转换为等效的布尔值
Convert.ToByte() 转换为8位无符号整数
Convert.ToChar() 转换为Unicode字符(char)
Convert.ToDateTime() 转换为DateTime(datetime)
Convert.ToDecimal() 转换为Decimal数字
Convert.ToDouble() 转换为双精度浮点数字(double)
Convert.ToInt16() 转换为16位有符号整数(short)
Convert.ToInt32() 转换为32位有符号整数(int)
Convert.ToInt64() 转换为64位有符号整数(long)
Convert.ToSByte() 转换为8位有符号整数
Convert.ToSingle() 转换为单精度浮点数字(float)
Convert.ToString() 转换为等效String表示形式(string)
Convert.ToUInt32() 转换为32位无符号整数
Convert.ToUInt64() 转换为64位无符号整数

        备注:对于整型和浮点型的强制数据类型操作也可以使用 Convert 方法代替,但是依然会损失存储范围大的数据类型的精度。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            String sum1 = Console.ReadLine();
            double sum2 = Convert.ToDouble(sum1);
            Console.WriteLine(sum2);
            Console.ReadKey();
        }
    }
}
//输入整数或者浮点数都能正常输出,但是输入字符就会bug。

        注意:Console.ReadLine:从标准输入流读取下一行字符。此处是字符,必须用String接收。

        ④用户定义的转换:用户定义的转换是使用特殊方法执行,这些方法可定义为在没有基类和派生类关系的自定义类型之间启用显式转换和隐式转换。

        有关详细信息,请参阅用户定义转换运算符。

强制转换和类型转换 - C# 编程指南 | Microsoft Docs

猜你喜欢

转载自blog.csdn.net/qq_45336030/article/details/126092152