C#的ToString函数
在 C# 中,ToString() 是一个非常基础且常用的方法,所有类型(包括自定义类型)都继承自 object 类的 ToString() 方法,其主要作用是将对象转换为字符串表示形式。
1. 基本用法
-
默认实现:对于基础数据类型(如
int、float、DateTime等),ToString()有默认实现,会返回该类型的常规字符串表示。int num = 123; string str = num.ToString(); // 结果为 "123" DateTime dt = new DateTime(2023, 10, 1); string dateStr = dt.ToString(); // 结果类似 "2023/10/1 0:00:00"(取决于系统文化) -
自定义类型:默认情况下,自定义类的
ToString()会返回类的全名(命名空间 + 类名)。通常需要重写该方法以返回有意义的字符串:public class Person { public string Name { get; set; } public int Age { get; set; } // 重写 ToString() public override string ToString() { return $"{Name}, {Age}岁"; } } // 使用 Person p = new Person { Name = "张三", Age = 25 }; string personStr = p.ToString(); // 结果为 "张三, 25岁"
2. 格式化字符串(Format Specifier)
许多基础类型(如数值、日期、枚举等)的 ToString() 支持格式化字符串,用于控制转换后的字符串格式。语法为:
变量.ToString("格式化字符串");
(1)数值类型格式化
-
标准格式(如
F、N、C等):F:固定小数位数(F0无小数,F2保留2位小数)double num = 123.456; Console.WriteLine(num.ToString("F0")); // "123"(四舍五入) Console.WriteLine(num.ToString("F2")); // "123.46"N:带千位分隔符(可指定小数位数)int bigNum = 1234567; Console.WriteLine(bigNum.ToString("N0")); // "1,234,567"C:货币格式(受系统文化影响)decimal money = 123.45m; Console.WriteLine(money.ToString("C")); // 中文环境下为 "¥123.45"
-
自定义格式(如
0、#、.等):0:强制占位(位数不足时补0)#:可选占位(位数不足时不显示)
double num = 12.3; Console.WriteLine(num.ToString("000.00")); // "012.30"(补0) Console.WriteLine(num.ToString("###.##")); // "12.3"(不补0)
(2)日期时间格式化
通过格式化字符串控制日期时间的显示格式:
DateTime dt = new DateTime(2023, 10, 1, 14, 30, 0);
Console.WriteLine(dt.ToString("yyyy-MM-dd")); // "2023-10-01"
Console.WriteLine(dt.ToString("HH:mm:ss")); // "14:30:00"
Console.WriteLine(dt.ToString("yyyy年MM月dd日 HH:mm")); // "2023年10月01日 14:30"
(3)枚举类型格式化
枚举的 ToString() 可返回枚举值的名称,也可通过格式符返回数值:
enum Status { Success, Error, Pending }
Status s = Status.Success;
Console.WriteLine(s.ToString()); // "Success"(默认返回名称)
Console.WriteLine(s.ToString("D")); // "0"(返回数值)
Console.WriteLine(s.ToString("X")); // "00000000"(返回十六进制)
3. 文化相关格式化(IFormatProvider)
ToString() 还有一个重载方法,可指定文化(CultureInfo),用于处理不同地区的格式差异(如数字分隔符、日期格式等):
double num = 1234.56;
// 美国文化(千位分隔符为逗号,小数点为点)
Console.WriteLine(num.ToString("N", CultureInfo.InvariantCulture)); // "1,234.56"
// 德国文化(千位分隔符为点,小数点为逗号)
Console.WriteLine(num.ToString("N", new CultureInfo("de-DE"))); // "1.234,56"
4. 注意事项
- 空值处理:如果对象为
null,调用ToString()会抛出NullReferenceException,需提前判断:object obj = null; string str = obj?.ToString() ?? "null"; // 安全处理空值 - 性能:频繁调用
ToString()可能影响性能(尤其是复杂对象),需合理使用。 - 自定义格式:对于复杂的格式化需求,建议重写
ToString()或使用专门的格式化工具类。
总之,ToString() 是类型转换为字符串的核心方法,灵活使用其格式化功能可以满足各种字符串表示需求。