C# 四种类型转换深度拆解:强制转换、Convert、ToString、Parse 一站式吃透

目录
前言
一、Convert 通用转换工具类
2.1 Convert 核心作用与解决场景
2.2 全套 Convert 转换 API 实战
2.3 (int)强制转换 VS Convert.ToInt32()核心区别
2.4 Convert 优缺点总结
二、ToString ():任意类型安全转为字符串
2.1 基础用法演示
2.2 适用场景与核心优势
三、Parse ():纯格式字符串反向解析为数值
3.1 基础语法与正确示例
3.2 常见报错场景与原因
3.3 键盘输入经典实战写法
四、四类转换方式全方位对比总表
五、高频踩坑避坑精华总结
整合全套可直接运行测试代码
前言
前面我们学习了隐式自动转换、(类型) 显式强制转换,日常开发里光这两种远远不够:
字符串数字没法用括号强转、小数取舍规则不符合业务需求、需要把数据展示到界面上……
本篇补齐 C# 开发最常用的另外三类转换:Convert工具类、ToString()、Parse(),把 C# 所有主流类型转换体系全部打通,新手看完按需选用即可。
一、Convert 通用转换工具类
2.1 核心定位
Convert是.NET 内置静态工具类,专门解决普通强制转换两大短板:
普通(int)强制转换无法将数字字符串转为数值,Convert 支持字符串→数字;
强制转换小数直接砍掉小数位,Convert 默认采用数学四舍五入取整,贴合日常计算逻辑。
2.2 全套 Convert 常用转换 API 示例
1)字符串转换各类整数
适配全部有符号、无符号整型:
csharp
运行
// 无符号 0~255
Convert.ToByte("123");
// 有符号 -128~127
Convert.ToSByte("-123");

Convert.ToInt16("123"); // short
Convert.ToUInt16("123"); // ushort
Convert.ToInt32("123"); // int(开发最高频)
Convert.ToUInt32("123"); // uint
Convert.ToInt64("123"); // long
Convert.ToUInt64("123"); // ulong

2)字符串转为浮点小数
csharp
运行
Convert.ToSingle("1.23"); // float 单精度
Convert.ToDouble("1.23"); // double 双精度
Convert.ToDecimal("1.23"); // decimal 高精度(财务计算专用)

3)布尔、字符、万能数值转字符串
csharp
运行
// 数字转bool:非0=true,0=false
Console.WriteLine(Convert.ToBoolean(1)); // True
Console.WriteLine(Convert.ToBoolean(0)); // False

// ASCII数字转对应字符
Console.WriteLine(Convert.ToChar(65)); // A

// 任意数字转为字符串
string str = Convert.ToString(123);

2.3 重中之重:(int)强制转换 VS Convert.ToInt32()
核心差异:小数处理逻辑
csharp
运行
double num = 1.999;
// 方式1:强制转换,直接截断舍弃所有小数
int res1 = (int)num;
Console.WriteLine($"强制转换结果:{res1}"); // 1

// 方式2:Convert转换,数学四舍五入
int res2 = Convert.ToInt32(num);
Console.WriteLine($"Convert转换结果:{res2}"); // 2

边界特殊规则:C#「四舍六入五成双」
csharp
运行
double n1 = 2.5;
(int)n1; // 2
Convert.ToInt32(n1); // 3

double n2 = 3.5;
(int)n2; // 3
Convert.ToInt32(n2); // 4

表格
转换方式 处理逻辑 示例 1.999 示例 1.2 适用场景
(int)强制转换 直接截断抛弃小数部分 1 1 单纯舍弃小数、数据截取
Convert.ToInt32 标准四舍五入(五成双) 2 1 业务数值计算、正常取整
2.4 Convert 优缺点
优点
支持字符串与数值互相转换,弥补强制转换硬伤;
小数取整符合日常数学习惯;
API 覆盖全部基础类型,通用性极强。
缺点
数值超出目标类型取值范围、格式非法时直接抛出运行异常;
纯数字之间简单转换,性能略低于原生强制转换。
二、ToString ():任意类型零风险转字符串
2.1 基本介绍
C# 所有值类型、引用类型都自带.ToString()实例方法,作用:把数字、布尔、字符、枚举等数据统一转为文本字符串,转换永远不会报错。
代码演示
csharp
运行
int num = 123;
double d = 1.23;
bool flag = true;
char ch = 'A';

string s1 = num.ToString();
string s2 = d.ToString();
string s3 = flag.ToString();
string s4 = ch.ToString();

Console.WriteLine(s1.GetType().Name); // String
Console.WriteLine(s2.GetType().Name); // String

2.2 实战价值
界面展示数据:上位机、WinForm、网页把后端数字展示给用户;
日志打印、拼接文本;
优势:百分百安全,不存在格式错误、溢出崩溃问题。
三、Parse ():规范字符串精准解析为数值
3.1 基础语法
格式:目标类型.Parse(数字字符串)
要求:字符串内容必须严格匹配目标类型格式,格式错误运行直接崩溃。
csharp
运行
string strInt = "123";
int a = int.Parse(strInt);

string strDouble = "1.23";
double b = double.Parse(strDouble);

3.2 典型报错场景
csharp
运行
// 报错:int不识别小数点,字符串带小数无法解析为整数
// int err = int.Parse("1.23");

// 报错:包含字母符号、空字符串全部解析失败
// int err2 = int.Parse("12a3");

3.3 折中方案:带小数字符串转整数
先解析为浮点,再强制截断取整:
csharp
运行
int res = (int)double.Parse("1.23");
Console.WriteLine(res); // 1

3.4 经典实战:读取控制台键盘输入
键盘输入默认拿到的一定是字符串,日常控制台开发标配写法:
csharp
运行
Console.WriteLine("请输入数字:");
int inputNum = int.Parse(Console.ReadLine());
Console.WriteLine($"你输入的数字:{inputNum}");

四、四种主流转换方式全方位对比
表格
转换方式 作用方向 核心特点 优点 短板
(int)强制显式转换 数字之间互转 二进制直接截断 速度最快,轻量化 不能转字符串,小数直接砍尾,无四舍五入
Convert.ToXX() 全类型通用转换 支持字符串转数字、四舍五入 功能全面,适配场景多 越界、格式错误抛异常,性能稍弱
.ToString() 任意类型 → 字符串 内置实例方法 绝对安全永不报错 只能转字符串,无法反向解析数字
类型.Parse() 合规字符串 → 数值 专一解析文本数字 写法简洁高效 格式不匹配直接程序崩溃,容错极低
结合之前学的两类:
隐式转换:小范围→大范围自动赋值,零数据丢失;
显式强制转换(类型):手动强转,存在数据丢失风险。
至此 C# 全套基础类型转换体系全部学完。
五、高频踩坑避坑总结
int.Parse("1.23")必然报错,整数解析不识别小数点;
Parse 只接受纯净对应格式文本,空格、字母、特殊符号都会程序崩溃;
ToString 是实例自带方法,无需引用工具类,万能转字符串;
带小数的数字字符串想要整数结果,先解析 double 再强转 int;
追求取整精度选 Convert,单纯砍掉小数用强制转换;
接收用户不确定输入,后期进阶可用TryParse规避崩溃。
六、完整整合可运行测试代码
csharp
运行
using System;

namespace TypeConvertAllDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("1、Convert转换测试");
double dNum = 1.999;
int castInt = (int)dNum;
int convertInt = Convert.ToInt32(dNum);
Console.WriteLine($"强制截断:{castInt}");
Console.WriteLine($"Convert四舍五入:{convertInt}");

Console.WriteLine(Convert.ToBoolean(1));
Console.WriteLine(Convert.ToChar(65));

Console.WriteLine("\n2、ToString()转字符串");
int num = 666;
string strNum = num.ToString();
Console.WriteLine($"转换后类型:{strNum.GetType().Name}");

Console.WriteLine("\n3、Parse字符串解析数值");
string s1 = "888";
int parseRes = int.Parse(s1);
Console.WriteLine($"Parse解析结果:{parseRes}");

// 带小数文本转整数
string s2 = "3.69";
int res = (int)double.Parse(s2);
Console.WriteLine($"小数字符串转整数:{res}");

Console.WriteLine("\n键盘输入测试");
//int input = int.Parse(Console.ReadLine());
//Console.WriteLine(input);
}
}
}

快速
解题答疑
PPT 生成
AI 表格
图像生成
更多

posted @ 2026-08-03 21:32  狂浪的狼  阅读(50)  评论(0)    收藏  举报