Table of contents
Open Table of contents
241115-错误消息列表的格式化输出
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
// 模拟错误消息列表
List<string> errorMsgList = new List<string>
{
"Field 'xxx1' is empty.",
"Field 'xxx2' is empty.",
"Field 'xxx3' is empty.",
"Field 'xxx4' is empty."
};
if (errorMsgList != null && errorMsgList.Any())
{
// ===== 方式1:使用 StringBuilder =====
Console.WriteLine("=========[方式1]=========");
StringBuilder valiMesStrBui = new StringBuilder();
int index = 1;
foreach (string item in errorMsgList.Distinct())
{
valiMesStrBui.AppendLine($"{index}.{item}");
index++;
}
valiMesStrBui.AppendLine("存在上述异常,请维护后再尝试提交");
Console.WriteLine(valiMesStrBui.ToString());
// ===== 方式2:使用 string.Join + LINQ Select =====
Console.WriteLine("=========[方式2]=========");
string errorMessages = string.Join(
Environment.NewLine,
errorMsgList.Select((string msg, int i) =>
$"{i + 1}.{msg}")) +
"\n 存在上述异常,请维护后再尝试提交";
Console.WriteLine(errorMessages);
}
Console.ReadKey();
}
}
}
两种方式对比
| 特性 | 方式1:StringBuilder | 方式2:string.Join + LINQ |
|---|---|---|
| 实现方式 | 命令式循环(foreach),逐步追加字符串 | 函数式风格(Select),一次性连接 |
| 可读性 | 步骤清晰,容易理解,适合初学者 | 代码更简洁、紧凑,表达力强,符合函数式编程习惯 |
| 性能 | 在循环内多次追加,但StringBuilder保证了高效的内存使用 | 在Select中生成中间字符串集合,然后一次性连接。对于小列表,差异可忽略 |
| 索引处理 | 手动维护 index 变量 | 利用Select的重载,直接获取索引 i |
| 扩展性 | 易于在循环中添加复杂逻辑(如条件过滤) | 易于链式调用其他LINQ方法(如Where、OrderBy) |
| 换行符使用 | 使用AppendLine,自动添加平台相关的换行符 | 使用Environment.NewLine显式指定,更明确 |
(完)
如果这篇文章刚好帮到了你,欢迎请我喝杯咖啡!