任务五 Convert 类
前置说明
Convert是C#中用于类型安全转换的静态类(位于System命名空间),所有方法均为静态方法,调用格式为Convert.方法名(参数);
- 核心优势:相比强制类型转换,
Convert类对不同类型的兼容性更强,且会做基础的合法性校验; - 所有示例需先引入
using System;。
1. Convert.ToBoolean
| 项 | 说明 |
|---|---|
| 用途 | 将指定值转换为布尔值(bool类型,true/false) |
| 语法 | Convert.ToBoolean(待转换值) |
| 参数 | 支持的输入类型:数值型(int/double等)、字符串、对象等 |
| 注意事项 | ⚠️ 重要修正: 1. 数值型转换规则:0→ false,非0→true;2. 字符串转换规则: - "True"/"true"/"false"/"False"→对应布尔值(不区分大小写); - 其他字符串抛 FormatException;3. null值转换返回false(注意:不是抛异常);4. ❌ 不支持从 char类型直接转换,Convert.ToBoolean(char)方法不存在,调用会引发编译错误。 |
用法示例(ToBoolean)
// 示例1:数值型转换
int num0 = 0;
int num1 = 10;
Console.WriteLine(Convert.ToBoolean(num0)); // 输出:False
Console.WriteLine(Convert.ToBoolean(num1)); // 输出:True
// 示例2:字符串转换
string strTrue = "True";
string strFalse = "false";
Console.WriteLine(Convert.ToBoolean(strTrue)); // 输出:True
Console.WriteLine(Convert.ToBoolean(strFalse)); // 输出:False
// 示例3:null转换
object nullObj = null;
Console.WriteLine(Convert.ToBoolean(nullObj)); // 输出:False(返回默认值,而非异常)
// 错误示例(编译错误)
// char ch = 'a';
// Console.WriteLine(Convert.ToBoolean(ch)); // ❌ 编译错误:无法从char转换
// string errStr = "123";
// Console.WriteLine(Convert.ToBoolean(errStr)); // 运行时抛FormatException
2. Convert.ToChar
| 项 | 说明 |
|---|---|
| 用途 | 将指定值转换为单个字符(char类型) |
| 语法 | Convert.ToChar(待转换值) |
| 参数 | 支持的输入类型:int(ASCII码/Unicode码)、string(单字符字符串)、byte、对象等 |
| 注意事项 | ⚠️ 重要修正: 1. int类型:转换为对应Unicode码点的字符(如65→'A'),需在0~65535范围内,否则抛 OverflowException;2. string类型:必须是单字符字符串(如"A"),空字符串或长度>1抛 FormatException;3. ❌ 不支持从 bool类型直接转换,Convert.ToChar(bool)方法不存在;4. null值转换抛ArgumentNullException。 |
用法示例(ToChar)
// 示例1:int(Unicode码点)转换
int unicodeA = 65;
int unicode0 = 48;
Console.WriteLine(Convert.ToChar(unicodeA)); // 输出:A
Console.WriteLine(Convert.ToChar(unicode0)); // 输出:0
// 示例2:单字符字符串转换
string singleChar = "B";
Console.WriteLine(Convert.ToChar(singleChar)); // 输出:B
// 示例3:byte类型转换
byte b = 65;
Console.WriteLine(Convert.ToChar(b)); // 输出:A
// 错误示例
// bool bVal = true;
// Console.WriteLine(Convert.ToChar(bVal)); // ❌ 编译错误:无法从bool转换
// string multiChar = "AB";
// Console.WriteLine(Convert.ToChar(multiChar)); // 运行时抛FormatException
// int outRange = 70000;
// Console.WriteLine(Convert.ToChar(outRange)); // 运行时抛OverflowException
3. Convert.ToDateTime
| 项 | 说明 |
|---|---|
| 用途 | 将指定值转换为DateTime类型(日期时间) |
| 语法 | Convert.ToDateTime(待转换值) |
| 参数 | 支持的输入类型:string(日期字符串)、对象等 |
| 注意事项 | ⚠️ 重要修正: 1. 字符串转换:需符合可识别的日期格式(如"2026-02-24"、"2026/2/24 15:30"),格式不合法抛 FormatException;2. 空字符串("")转换抛 FormatException;3. null值转换返回DateTime.MinValue(注意:不是抛异常);4. ❌ 不支持从数值类型(如long)直接转换, Convert.ToDateTime(long)方法不存在;5. 推荐结合 DateTime.TryParse使用(避免异常),Convert.ToDateTime更适合确定格式合法的场景。 |
用法示例(ToDateTime)
// 示例1:标准格式字符串转换
string dateStr1 = "2026-02-24";
string dateStr2 = "2026/2/24 15:30:25";
Console.WriteLine(Convert.ToDateTime(dateStr1)); // 输出:2026/2/24 00:00:00
Console.WriteLine(Convert.ToDateTime(dateStr2)); // 输出:2026/2/24 15:30:25
// 示例2:null转换
object nullObj = null;
Console.WriteLine(Convert.ToDateTime(nullObj)); // 输出:0001/1/1 00:00:00 (DateTime.MinValue)
// 错误示例
// long ticks = DateTime.Now.Ticks;
// Console.WriteLine(Convert.ToDateTime(ticks)); // ❌ 编译错误:无法从long转换
// string errDate = "2026-13-01";
// Console.WriteLine(Convert.ToDateTime(errDate)); // 运行时抛FormatException
4. Convert.ToDecimal
| 项 | 说明 |
|---|---|
| 用途 | 将指定值转换为十进制小数(decimal类型,高精度,适合财务计算) |
| 语法 | Convert.ToDecimal(待转换值) |
| 参数 | 支持的输入类型:int、double、string、float、对象等 |
| 注意事项 | 1. 数值型转换:直接转换,double/float的精度损失会被保留; 2. 字符串转换:需符合数字格式(如"123.45"、"-67.89"),非数字字符串抛 FormatException;3. bool类型:true→1m,false→0m; 4. 超出decimal范围(±7.9×10²⁸)抛 OverflowException;5. null值转换返回0m(注意:不是抛异常)。 |
用法示例(ToDecimal)
// 示例1:数值型转换
int intNum = 123;
double doubleNum = 45.6789;
Console.WriteLine(Convert.ToDecimal(intNum)); // 输出:123
Console.WriteLine(Convert.ToDecimal(doubleNum)); // 输出:45.6789
// 示例2:字符串转换
string decStr = "987.65";
Console.WriteLine(Convert.ToDecimal(decStr)); // 输出:987.65
// 示例3:bool类型转换
bool b = true;
Console.WriteLine(Convert.ToDecimal(b)); // 输出:1
// 示例4:null转换
object nullObj = null;
Console.WriteLine(Convert.ToDecimal(nullObj)); // 输出:0
// 错误示例
// string nonNumStr = "123a";
// Console.WriteLine(Convert.ToDecimal(nonNumStr)); // 抛FormatException
5. Convert.ToDouble
| 项 | 说明 |
|---|---|
| 用途 | 将指定值转换为双精度浮点型(double类型) |
| 语法 | Convert.ToDouble(待转换值) |
| 参数 | 支持的输入类型:int、decimal、string、float、对象等 |
| 注意事项 | 1. 数值型转换:decimal转换为double可能损失精度; 2. 字符串转换:需符合数字格式(如"123.45"、"1e3"),非数字字符串抛 FormatException;3. bool类型:true→1.0,false→0.0; 4. null值转换返回0.0(注意:不是抛异常);5. 超出double范围返回 double.PositiveInfinity/double.NegativeInfinity。 |
用法示例(ToDouble)
// 示例1:数值型转换
decimal decNum = 123.456m;
float floatNum = 78.9f;
Console.WriteLine(Convert.ToDouble(decNum)); // 输出:123.456
Console.WriteLine(Convert.ToDouble(floatNum)); // 输出:78.9000015258789
// 示例2:字符串转换
string doubleStr = "1234.5678";
string sciStr = "1e3";
Console.WriteLine(Convert.ToDouble(doubleStr)); // 输出:1234.5678
Console.WriteLine(Convert.ToDouble(sciStr)); // 输出:1000
// 示例3:bool类型转换
bool b = false;
Console.WriteLine(Convert.ToDouble(b)); // 输出:0
// 示例4:null转换
object nullObj = null;
Console.WriteLine(Convert.ToDouble(nullObj)); // 输出:0
6. Convert.ToSingle
| 项 | 说明 |
|---|---|
| 用途 | 将指定值转换为单精度浮点型(float类型,也写作Single) |
| 语法 | Convert.ToSingle(待转换值) |
| 参数 | 支持的输入类型:int、double、string、decimal、对象等 |
| 注意事项 | 1. ToSingle是float类型的转换方法(C#中无ToFloat方法);2. 数值型转换:double/decimal转换为float会损失精度; 3. 字符串转换:需符合数字格式,非数字字符串抛 FormatException;4. bool类型:true→1.0f,false→0.0f; 5. null值转换返回0.0f(注意:不是抛异常);6. 超出float范围返回 float.PositiveInfinity/float.NegativeInfinity。 |
用法示例(ToSingle)
// 示例1:数值型转换
double doubleNum = 123.456789;
decimal decNum = 987.654m;
Console.WriteLine(Convert.ToSingle(doubleNum)); // 输出:123.456787
Console.WriteLine(Convert.ToSingle(decNum)); // 输出:987.654
// 示例2:字符串转换
string floatStr = "45.678";
Console.WriteLine(Convert.ToSingle(floatStr)); // 输出:45.678
// 示例3:bool类型转换
bool b = true;
Console.WriteLine(Convert.ToSingle(b)); // 输出:1
// 示例4:null转换
object nullObj = null;
Console.WriteLine(Convert.ToSingle(nullObj)); // 输出:0
7. Convert.ToString
| 项 | 说明 |
|---|---|
| 用途 | 将指定值转换为字符串(string类型),是最常用的转换方法之一 |
| 语法 | 1. Convert.ToString(待转换值);2. Convert.ToString(待转换值, int toBase)(数值转指定进制字符串) |
| 参数 | - 待转换值:支持所有基本类型(bool、int、DateTime、char等); - toBase:进制数(2~36),仅对数值型有效 |
| 注意事项 | ⚠️ 重要修正: 1. null值转换返回null(注意:不是空字符串),与其他Convert方法行为一致;2. bool类型:返回"True"/"False"(首字母大写); 3. DateTime类型:返回系统默认格式的日期字符串; 4. 数值转进制:toBase超出2~36范围抛 ArgumentOutOfRangeException;5. 相比直接调用 ToString()方法,Convert.ToString对null的处理方式相同(都会返回null),但Convert.ToString是静态方法,不会引发NullReferenceException。 |
用法示例(ToString)
// 示例1:基础类型转换
int intNum = 123;
bool b = false;
DateTime dt = new DateTime(2026, 2, 24);
char ch = 'A';
object nullObj = null;
Console.WriteLine(Convert.ToString(intNum)); // 输出:123
Console.WriteLine(Convert.ToString(b)); // 输出:False
Console.WriteLine(Convert.ToString(dt)); // 输出:2026/2/24 00:00:00
Console.WriteLine(Convert.ToString(ch)); // 输出:A
Console.WriteLine(Convert.ToString(nullObj) == null); // 输出:True(返回null)
// 示例2:数值转指定进制字符串
int num = 10;
Console.WriteLine(Convert.ToString(num, 2)); // 二进制:1010
Console.WriteLine(Convert.ToString(num, 8)); // 八进制:12
Console.WriteLine(Convert.ToString(num, 16)); // 十六进制:a
// 示例3:对比ToString()和Convert.ToString(安全调用)
string nullStr = null;
// Console.WriteLine(nullStr.ToString()); // 抛NullReferenceException
Console.WriteLine(Convert.ToString(nullStr)); // 输出空行(实际是null,Console.WriteLine处理null时空行)
总结(核心关键点)
| 转换方法 | null处理 | 主要异常 | 不支持的类型 |
|---|---|---|---|
| ToBoolean | 返回false | FormatException(字符串格式错误) | char |
| ToChar | 抛ArgumentNullException | FormatException(字符串长度≠1)、OverflowException(int超出范围) | bool |
| ToDateTime | 返回DateTime.MinValue | FormatException(日期格式错误) | 数值类型(int/long等) |
| ToDecimal | 返回0m | FormatException、OverflowException | - |
| ToDouble | 返回0.0 | FormatException、OverflowException | - |
| ToSingle | 返回0.0f | FormatException、OverflowException | - |
| ToString | 返回null | ArgumentOutOfRangeException(进制参数错误) | - |
重要补充
- 静态调用:
Convert是静态类,所有方法需通过Convert.方法名()调用,无需实例化; - null处理差异:除
ToChar外,多数方法对null返回对应类型的默认值,而非抛异常; - 异常风险:字符串转换时,格式不合法会抛
FormatException,数值超出范围抛OverflowException; - 场景适配:
- 财务/高精度计算用
ToDecimal; - 普通浮点计算用
ToDouble/ToSingle; - 日期转换优先用
DateTime.TryParse(容错),确定格式合法时用ToDateTime; Convert.ToString是静态方法,调用时即使参数为null也不会引发NullReferenceException。
- 财务/高精度计算用