Console.WriteLine() 是首选,因它自动换行防粘连、支持字符串插值、对 null 安全;慎用重载,避免 IFormatProvider;中文乱码需调编码与字体。

直接用 Console.WriteLine(),不是 Console.Write(),除非你明确要避免换行。
为什么 Console.WriteLine() 是首选
它自动追加换行符,避免输出粘连,符合绝大多数调试和日志场景。新手常误用 Console.Write() 后发现多条输出挤在同一行,还得手动加 "\n",反而更麻烦。
-
Console.WriteLine("Hello")→ 输出Hello后光标换行 -
Console.Write("Hello")→ 输出Hello后光标停在末尾,下一次输出会紧贴着写 - 字符串插值(C# 6+)可直接用:
Console.WriteLine($"Value: {x}"),比string.Format更简洁安全 - 注意:
WriteLine()对null值安全,不会抛异常,会输出空行
Console.WriteLine() 的重载陷阱
它有 19 个重载,但日常只用对 3 类参数:字符串字面量、带占位符的格式串、任意对象。别碰带 IFormatProvider 的重载——除非你在做多语言数字/日期本地化,否则纯属增加认知负担。
- 推荐写法:
Console.WriteLine("Name: {0}, Age: {1}", name, age) - 不推荐(冗余):
Console.WriteLine(CultureInfo.CurrentCulture, "Age: {0}", age) - 数组或集合?别直接传:
Console.WriteLine(myList)只会输出类型名(如System.Collections.Generic.List`1[System.String]),应先string.Join(", ", myList)
中文乱码?检查控制台编码和字体
在 Windows 上,C# 默认用系统 OEM 编码(如 GBK),但 VS 或终端可能以 UTF-8 解释,导致中文显示为问号或方块。这不是代码问题,是环境配置问题。
- 临时修复:程序开头加
Console.OutputEncoding = System.Text.Encoding.UTF8; - 永久修复(Windows):右键控制台标题栏 → “属性” → “字体” 选支持中文的(如 “Lucida Console” 或 “Consolas”)→ “默认值” 里勾选“使用旧版控制台”(Win10/11 某些版本必需)
- VS 内置终端(如 Package Manager Console)不走系统控制台逻辑,中文通常正常;但 PowerShell 终端需确认
$OutputEncoding = [System.Text.Encoding]::UTF8
真正卡住人的往往不是语法,而是输出看不见——要么被 IDE 的“假控制台”吞了,要么编码/字体没对上。写完第一行 Console.WriteLine("test"),先确认它真出现在你预期的位置,再往下写逻辑。



















