文章目录
- 前言
- 注意事项
- [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.");
}
}
}