跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp 字符串格式化
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C#字符串格式化 = '''字符串格式化'''是C#中处理文本数据的重要技术,它允许开发者以特定格式组合、插入或转换变量值到字符串中。本教程将详细介绍C#中的字符串格式化方法,包括传统方式和现代方式。 == 介绍 == 在C#中,字符串格式化主要有以下几种方式: * '''复合格式化''':使用 <code>string.Format</code> 或控制台输出方法 * '''插值字符串''':C# 6.0引入的<code>$""</code>语法 * '''ToString方法''':对象自带的格式化能力 这些方法都遵循相似的格式规范,但语法和使用场景有所不同。 == 复合格式化 == 复合格式化使用格式项(format items)作为占位符,其基本语法为: <pre>{index[,alignment][:formatString]}</pre> === 基本示例 === <syntaxhighlight lang="csharp"> string name = "Alice"; int age = 25; string formatted = string.Format("Name: {0}, Age: {1}", name, age); Console.WriteLine(formatted); // 输出: Name: Alice, Age: 25 </syntaxhighlight> === 对齐和格式 === <syntaxhighlight lang="csharp"> double price = 19.99; Console.WriteLine("Price: {0,10:C2}", price); // 输出: Price: $19.99 // 解释: 10表示10字符宽度,C2表示货币格式带2位小数 </syntaxhighlight> == 字符串插值 == C# 6.0引入的更简洁的语法: <syntaxhighlight lang="csharp"> string name = "Bob"; int score = 95; Console.WriteLine($"Player: {name}, Score: {score:D3}"); // 输出: Player: Bob, Score: 095 // 解释: D3表示3位十进制数,不足补零 </syntaxhighlight> == 标准数字格式 == 常用数字格式说明符: {| class="wikitable" |+ 常用数字格式说明符 ! 说明符 !! 描述 !! 示例 !! 输出 |- | "C" or "c" | 货币 | 123.456 ("C2") | $123.46 |- | "D" or "d" | 十进制 | 42 ("D5") | 00042 |- | "E" or "e" | 科学计数法 | 1052.0329112756 ("E2") | 1.05E+003 |- | "F" or "f" | 定点数 | 1234.567 ("F2") | 1234.57 |- | "P" or "p" | 百分比 | 0.369 ("P1") | 36.9% |} == 自定义格式 == 开发者可以定义自己的格式模式: <syntaxhighlight lang="csharp"> DateTime now = DateTime.Now; Console.WriteLine($"Current time: {now:yyyy-MM-dd HH:mm:ss}"); // 输出示例: Current time: 2023-08-15 14:30:45 </syntaxhighlight> == 文化敏感性 == 格式化可以针对特定文化区域: <syntaxhighlight lang="csharp"> double value = 1234.56; Console.WriteLine(value.ToString("C", new System.Globalization.CultureInfo("fr-FR"))); // 输出: 1 234,56 € </syntaxhighlight> == 性能考虑 == 对于高性能场景,应考虑使用: * <code>StringBuilder</code> 用于大量字符串操作 * 预编译格式字符串 * 避免在循环中进行不必要的格式化 == 实际应用案例 == === 报表生成 === <syntaxhighlight lang="csharp"> var products = new List<(string Name, decimal Price)>() { ("Laptop", 999.99m), ("Mouse", 25.50m), ("Keyboard", 45.75m) }; Console.WriteLine("{0,-15} {1,10}", "Product", "Price"); Console.WriteLine(new string('-', 26)); foreach (var item in products) { Console.WriteLine("{0,-15} {1,10:C2}", item.Name, item.Price); } /* 输出: Product Price -------------------------- Laptop $999.99 Mouse $25.50 Keyboard $45.75 */ </syntaxhighlight> === 日志记录 === <syntaxhighlight lang="csharp"> void Log(string message, DateTime timestamp, LogLevel level) { Console.WriteLine($"[{level,-7}] {timestamp:yyyy-MM-dd HH:mm:ss.fff}: {message}"); } Log("Application started", DateTime.Now, LogLevel.Info); // 输出示例: [Info ] 2023-08-15 14:30:45.123: Application started </syntaxhighlight> == 高级主题 == === 自定义格式化提供程序 === 实现 <code>IFormatProvider</code> 和 <code>ICustomFormatter</code> 接口: <syntaxhighlight lang="csharp"> public class CustomFormatter : IFormatProvider, ICustomFormatter { public object GetFormat(Type formatType) => formatType == typeof(ICustomFormatter) ? this : null; public string Format(string format, object arg, IFormatProvider formatProvider) { if (arg is int i && format == "hex") return $"0x{i:X}"; return arg.ToString(); } } int number = 255; Console.WriteLine(string.Format(new CustomFormatter(), "Hex value: {0:hex}", number)); // 输出: Hex value: 0xFF </syntaxhighlight> == 总结 == C#提供了多种强大的字符串格式化方式,从简单的值插入到复杂的文化敏感格式。选择合适的方法取决于: * 代码可读性需求 * 性能要求 * 本地化需求 * 代码维护考虑 现代C#开发中,字符串插值通常是首选,但在需要复用格式字符串或更复杂控制时,复合格式化仍然很有价值。 [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp 字符串]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)