Skip to content
Donghai's Blog
Go back

C# 技术备忘 (1)

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

(完)

如果这篇文章刚好帮到了你,欢迎请我喝杯咖啡


分享这篇文章:

上一篇
Dynamics 365 interview questions
下一篇
Dynamics 365 事件框架、事件执行管道
BlogsClub Meo Forever Blog