C# 数据类型转换

文章目录

  • 前言
  • 注意事项
  • [1. 隐式转换(Implicit Conversion)](#1. 隐式转换(Implicit Conversion))
  • [2. 显式转换(Explicit Conversion, 也称为强制转换)](#2. 显式转换(Explicit Conversion, 也称为强制转换))
  • [3. 使用转换方法](#3. 使用转换方法)
  • [4. 使用 Convert 类](#4. 使用 Convert 类)
  • [5. 使用 Parse 和 TryParse 方法](#5. 使用 Parse 和 TryParse 方法)
  • 示例代码

前言

在C#中,数据类型转换是一个常见的任务,可以分为几种主要类型:隐式转换、显式转换(强制转换)、使用转换方法、以及使用 Convert 类和 Parse 方法等。以下是一些关于C#数据类型转换的详细解释和示例。


注意事项

数据丢失:从大范围类型到小范围类型转换时,可能会导致数据丢失(例如从 double 到 int)。 溢出:如果转换后的值超出了目标类型的范围,可能会引发溢出异常(例如从 int 到 byte,如果 int 值大于 byte 的最大值)。 空值处理:在转换字符串或其他可能为 null 的类型时,要特别注意空值处理,以避免 NullReferenceException。


1. 隐式转换(Implicit Conversion)

隐式转换是编译器自动进行的,不会丢失数据或引发异常。例如,从小范围类型到大范围类型的转换:

csharp 复制代码
int a = 10;  
long b = a; // 隐式转换,从 int 到 long

2. 显式转换(Explicit Conversion, 也称为强制转换)

显式转换需要程序员明确指定转换类型,有时可能会导致数据丢失或溢出。使用 (目标类型) 语法进行转换:

csharp 复制代码
double d = 123.456;  
int i = (int)d; // 显式转换,从 double 到 int,结果为 123

3. 使用转换方法

某些类型提供了特定的转换方法,例如 ToString()、TryParse() 等。

csharp 复制代码
double num = 123.456;  
string str = num.ToString(); // 使用 ToString() 方法转换为字符串

4. 使用 Convert 类

Convert 类提供了多种静态方法来进行类型转换,这些方法在转换失败时会抛出异常。

csharp 复制代码
string strNum = "123";  
int intNum = Convert.ToInt32(strNum); // 使用 Convert.ToInt32() 方法

5. 使用 Parse 和 TryParse 方法

Parse 方法在转换失败时会抛出异常,而 TryParse 方法则不会,它返回一个布尔值来指示转换是否成功。

csharp 复制代码
string strNum = "123";  
int intNum;  
  
// 使用 Parse 方法  
intNum = int.Parse(strNum); // 如果转换失败,会抛出异常  
  
// 使用 TryParse 方法  
bool success = int.TryParse(strNum, out intNum); // 如果转换成功,success 为 true,intNum 被赋值

示例代码

以下是一个包含多种转换方法的完整示例:

csharp 复制代码
using System;  
  
class Program  
{  
    static void Main()  
    {  
        // 隐式转换  
        int intValue = 100;  
        long longValue = intValue;  
        Console.WriteLine($"Implicit conversion: {longValue}");  
  
        // 显式转换  
        double doubleValue = 123.456;  
        int intConverted = (int)doubleValue;  
        Console.WriteLine($"Explicit conversion: {intConverted}");  
  
        // 使用 Convert 类  
        string strValue = "456";  
        int intFromConvert = Convert.ToInt32(strValue);  
        Console.WriteLine($"Convert class: {intFromConvert}");  
  
        // 使用 Parse 方法  
        try  
        {  
            int intFromParse = int.Parse("789");  
            Console.WriteLine($"Parse method: {intFromParse}");  
        }  
        catch (FormatException)  
        {  
            Console.WriteLine("Parse method failed due to format error.");  
        }  
  
        // 使用 TryParse 方法  
        bool success = int.TryParse("101112", out int intFromTryParse);  
        if (success)  
        {  
            Console.WriteLine($"TryParse method: {intFromTryParse}");  
        }  
        else  
        {  
            Console.WriteLine("TryParse method failed.");  
        }  
    }  
}

相关推荐
武藤一雄2 小时前
C# 设计模式大全(第一弹|7种)
microsoft·设计模式·微软·c#·.net·.netcore
格林威3 小时前
Baumer相机锂电池极片裁切毛刺检测:防止内部短路的 5 个核心方法,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
向上的车轮4 小时前
熟悉C#如何转TypeScript——SDK与包引用
开发语言·typescript·c#
CSharp精选营5 小时前
Dispose 不释放?C# 资源泄漏的 3 种隐蔽场景排查
c#·资源泄漏
unicrom_深圳市由你创科技6 小时前
LabVIEW和C#在工业控制中的应用差异是什么?
fpga开发·c#·labview
唐青枫8 小时前
C#.NET Consul + Steeltoe 深入解析:服务注册发现、健康检查与微服务接入
c#·.net
DowneyJoy8 小时前
【Unity3D补充知识点】常用数据结构分析-集合(List<T>)
数据结构·unity·c#·list
格林威8 小时前
Baumer相机铝型材表面划伤长度测量:实现损伤量化评估的 5 个关键技术,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
DowneyJoy9 小时前
【Unity3D补充知识点】常用数据结构分析-数组(Array)
数据结构·unity·c#
格林威9 小时前
Baumer相机铝箔表面针孔检测:提升包装阻隔性的 7 个核心策略,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机