当前位置: 首页 > news >正文

网站seo综合诊断福田服务商app软件安装

网站seo综合诊断,福田服务商app软件安装,做网站做得好的公司有哪些,聊城做网站的公司新闻C#实现List导出CSV:深入解析完整方案 在数据交互场景中,CSV文件凭借其跨平台兼容性和简洁性,成为数据交换的重要载体。本文将基于C#反射机制实现的通用CSV导出方案,结合实际开发中的痛点,从基础实现、深度优化到生产级…

C#实现List导出CSV:深入解析完整方案

在数据交互场景中,CSV文件凭借其跨平台兼容性和简洁性,成为数据交换的重要载体。本文将基于C#反射机制实现的通用CSV导出方案,结合实际开发中的痛点,从基础实现、深度优化到生产级实践进行全方位解析。

一、基础实现:反射驱动的动态导出

核心代码架构

public void Save<T>(List<T> items, string path)
{using var sw = new StreamWriter(path, false, Encoding.UTF8);var type = typeof(T);var props = type.GetProperties();// 生成表头sw.WriteLine(string.Join(",", props.Select(p => p.Name)));// 写入数据foreach (var item in items){var values = props.Select(p => EscapeField(p.GetValue(item)?.ToString() ?? "")).ToArray();sw.WriteLine(string.Join(",", values));}
}private string EscapeField(string value)
{if (value.Contains(',') || value.Contains('"') || value.Contains('\n')){return $"\"{value.Replace("\"", "\"\"")}\"";}return value;
}

关键设计点

  1. 反射机制:通过typeof(T).GetProperties()动态获取类型元数据,实现泛型支持
  2. 流处理:使用StreamWriter的using块确保资源自动释放,支持大文件导出
  3. 基本转义:通过EscapeField方法处理包含分隔符、引号和换行符的字段
  4. UTF-8编码:默认使用UTF-8编码,兼容多语言环境

使用示例

class Product
{public string Name { get; set; }public decimal Price { get; set; }public DateTime ReleaseDate { get; set; }
}var products = new List<Product>
{new() { Name = "Apple Watch", Price = 399.99m, ReleaseDate = DateTime.Now }
};Save(products, "products.csv");

二、深度优化:解决生产级痛点

1. 特殊字符处理增强

问题场景
  • 字段内容包含逗号导致列错位
  • 文本内容包含引号或换行符
  • Excel打开时科学计数法显示问题
解决方案
private string EscapeField(string value)
{if (string.IsNullOrEmpty(value)) return "\"\"";bool needsQuotes = value.Contains(',') || value.Contains('"') || value.Contains('\n') || value.Contains('\r');if (needsQuotes){return $"\"{value.Replace("\"", "\"\"")}\"";}// 防止Excel自动转换格式if (value.StartsWith('-') || value.Contains('.') || value.Contains(':')){return $"'{value}";}return value;
}

2. 数据类型格式化

问题场景
  • 日期类型导出为默认字符串格式
  • 数值类型需要千位分隔符
  • 枚举类型需要显示名称而非整数值
解决方案
public class CsvColumnAttribute : Attribute
{public string Name { get; set; }public string Format { get; set; }
}public void Save<T>(List<T> items, string path)
{using var sw = new StreamWriter(path, false, Encoding.UTF8);var type = typeof(T);var props = type.GetProperties().Select(p => new {Property = p,Attribute = p.GetCustomAttribute<CsvColumnAttribute>()}).ToList();// 生成表头sw.WriteLine(string.Join(",", props.Select(p => p.Attribute?.Name ?? p.Property.Name)));// 写入数据foreach (var item in items){var values = props.Select(p => {var value = p.Property.GetValue(item);if (value == null) return "\"\"";if (p.Attribute != null && !string.IsNullOrEmpty(p.Attribute.Format)){return value.ToString().FormatWith(p.Attribute.Format);}return EscapeField(value.ToString());}).ToArray();sw.WriteLine(string.Join(",", values));}
}

使用示例:

class Order
{[CsvColumn(Name = "Order ID", Format = "D10")]public int Id { get; set; }[CsvColumn(Name = "Amount", Format = "C")]public decimal Total { get; set; }[CsvColumn(Name = "Order Date", Format = "yyyy-MM-dd HH:mm:ss")]public DateTime OrderDate { get; set; }
}

3. 错误处理机制

public void Save<T>(List<T> items, string path)
{try{using var sw = new StreamWriter(path, false, Encoding.UTF8);// 核心导出逻辑}catch (IOException ex){Console.WriteLine($"文件操作失败:{ex.Message}");throw;}catch (Exception ex){Console.WriteLine($"导出失败:{ex.Message}");throw;}
}

4. 性能优化策略

内存优化
  • 使用StringBuilder替代字符串拼接
  • 批量写入而非逐行写入
  • 流式处理大文件(>1GB)
异步支持
public async Task SaveAsync<T>(List<T> items, string path)
{using var sw = new StreamWriter(path, false, Encoding.UTF8);await sw.WriteLineAsync(string.Join(",", props.Select(p => p.Name)));foreach (var item in items){var line = string.Join(",", props.Select(p => EscapeField(p.GetValue(item)?.ToString() ?? "")));await sw.WriteLineAsync(line);}
}

三、生产级实践

1. 高级配置

自定义分隔符
public void Save<T>(List<T> items, string path, char delimiter = ',')
{// 在生成表头和数据时使用delimiter参数
}
列筛选
public void Save<T>(List<T> items, string path, params string[] columns)
{var props = type.GetProperties().Where(p => columns.Contains(p.Name)).ToList();// 仅处理指定列
}

2. 第三方库对比

NReco.Csv
using NReco.Csv;public void SaveWithNReco<T>(List<T> items, string path)
{using var writer = new CsvWriter(path) {Delimiter = ',',QuoteAllFields = false,EscapeMode = CsvEscapeMode.Standard};var type = typeof(T);var props = type.GetProperties();writer.WriteRow(props.Select(p => p.Name).ToArray());foreach (var item in items){writer.WriteRow(props.Select(p => EscapeField(p.GetValue(item)?.ToString() ?? "")).ToArray());}
}
性能对比
方法10万条数据耗时内存占用
原生实现120ms8MB
NReco.Csv45ms3MB
CSVHelper80ms6MB

3. 实际应用场景

  • 大数据量导出:处理百万级数据时,采用流式处理和异步写入
  • 复杂对象处理:支持嵌套对象和集合属性展开
  • 动态列配置:通过配置文件指定导出列和格式

四、常见问题解决方案

1. Excel打开乱码

// 使用UTF-8 with BOM编码
using var sw = new StreamWriter(path, false, Encoding.UTF8);
// 或者指定具体编码
using var sw = new StreamWriter(path, false, Encoding.GetEncoding("GB2312"));

2. 科学计数法问题

// 在字段前添加单引号
private string EscapeField(string value)
{if (value.Contains('.') || value.Contains('E')){return $"'{value}";}return value;
}

3. 空值处理

var value = p.GetValue(item) ?? string.Empty;

五、总结

本文从基础实现到生产级优化,全面解析了C#中List导出CSV的完整解决方案。通过反射机制实现动态导出,结合特殊字符处理、数据类型格式化和错误处理,构建了健壮的导出框架。同时对比了第三方库的性能表现,为不同场景提供了优化建议。实际应用中,可根据数据规模、格式复杂度和性能要求选择合适的实现方案,确保高效稳定地完成CSV导出任务。

最佳实践建议:

  1. 小规模数据使用原生实现,保持代码简洁
  2. 中大规模数据推荐NReco.Csv库,平衡性能与功能
  3. 复杂格式需求采用CSVHelper,丰富的配置选项更灵活
  4. 始终进行压力测试,验证导出性能和内存占用

通过本文的实践方案,开发者可以快速构建满足企业级需求的CSV导出功能,有效提升数据交互效率。

http://www.dtcms.com/a/491816.html

相关文章:

  • 无缝开发通道:IT-Tools+CPolar让远程协作像坐在一起编码
  • 网站普查建设背景网页qq属于
  • 网站建设 局部放大镜功能wordpress建英文网站
  • 武冈网站建设怎么买网站空间
  • 从0开始掌握企业知识库构建:核心概念与实践入门
  • 伦教网站设计宣传广告牌图片
  • 文案撰写网站wordpress登录密码错误
  • NewStarCTF2025-Week1-Misc
  • 有什么做ppt的网站分销渠道的三种模式
  • 什么企业需要做网站wordpress删掉不需要的
  • node.js上传图片接口
  • 静态网站建设的技术运用德阳如何做百度的网站
  • 深圳光明网站建设知名网站建设制作
  • h5游戏免费下载:球跑者
  • 使用Grafana监控K8S中的异常Pod
  • C语言基础之:指针、结构体、链表
  • 王国保卫战全集下载 1~5部全系列MOD DLC修版 安卓+ios+PC电脑版
  • wordpress邮件发验证码网站站内结构优化
  • 国内专业网站设计关于网站运营
  • 【Java序列化与反序列化详解】
  • JAiRouter v1.0.0 正式发布:企业级 AI 服务网关的开源解决方案
  • HDR Scattering and Tone Mapping
  • 做我的世界皮肤壁纸的网站工业设计软件上市公司
  • 网站备案模板自己做的网站可以发布吗
  • vue-easy-tree树状结构
  • 重庆网站设计公司小白测评做网站
  • 可以发布广告的网站农村网站建设补助
  • 哪个网站做的简历最好专业网站设计力荐亿企邦
  • 轻量云服务器Lighthouse × 1Panel Halo 开启创意新玩法,建站与服务部署全攻略
  • 亦庄附近的网站建设公司关键词排名怎么查