Skip to main content

任务五 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. ToSinglefloat类型的转换方法(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.ToStringnull的处理方式相同(都会返回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返回falseFormatException(字符串格式错误)char
ToChar抛ArgumentNullExceptionFormatException(字符串长度≠1)、OverflowException(int超出范围)bool
ToDateTime返回DateTime.MinValueFormatException(日期格式错误)数值类型(int/long等)
ToDecimal返回0mFormatException、OverflowException-
ToDouble返回0.0FormatException、OverflowException-
ToSingle返回0.0fFormatException、OverflowException-
ToString返回nullArgumentOutOfRangeException(进制参数错误)-

重要补充

  1. 静态调用Convert是静态类,所有方法需通过Convert.方法名()调用,无需实例化;
  2. null处理差异:除ToChar外,多数方法对null返回对应类型的默认值,而非抛异常;
  3. 异常风险:字符串转换时,格式不合法会抛FormatException,数值超出范围抛OverflowException
  4. 场景适配
    • 财务/高精度计算用ToDecimal
    • 普通浮点计算用ToDouble/ToSingle
    • 日期转换优先用DateTime.TryParse(容错),确定格式合法时用ToDateTime
    • Convert.ToString是静态方法,调用时即使参数为null也不会引发NullReferenceException