C# 技术备忘 (1)

419 字
2 分钟
C# 技术备忘 (1)

241228-LINQ#

LINQ语言集成查询是一系列直接将查询功能集成到 C# 语言的技术统称。

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方法(如WhereOrderBy
换行符使用使用AppendLine,自动添加平台相关的换行符使用Environment.NewLine显式指定,更明确

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
C# 技术备忘 (1)
https://mgrowup.com/posts/csharp/memp-01/
作者
Donghai
发布于
2026-08-19
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Donghai
Hello, I'm Donghai.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
62
分类
9
标签
37
总字数
76,949
运行时长
0
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.5
文章许可
CC BY-NC-SA 4.0