using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; namespace Comon { public class CsvUtil { /// <summary> /// 生成Csv格式的字符串 /// </summary> /// <typeparam name="T">数据源类型</typeparam> /// <param name="sourceDate">数据源</param> /// <param name="generateFileldDict">需要生成到Csv格式字段及描述</param> /// <returns></returns> public static string GenerateCsvFormate<T>(IList<T> sourceDate, IDictionary<string, string> generateFileldDict) where T : class, new() { if (sourceDate == null) { throw new ArgumentNullException(nameof(sourceDate)); } Type type = typeof(T); PropertyInfo[] propertyInfos = type.GetProperties(); IList<string> fieldValueList = new List<string>(generateFileldDict.Count); StringBuilder builder = new StringBuilder(); foreach (var filedName in generateFileldDict.Values) { fieldValueList.Add(filedName); } builder.AppendLine(string.Join(",", fieldValueList)); foreach (var item in sourceDate) { fieldValueList.Clear(); foreach (var field in generateFileldDict.Keys) { PropertyInfo property = propertyInfos.FirstOrDefault(c => c.Name == field); if (property != null) { var fieldValue = property.GetValue(item).ToString(); fieldValueList.Add(fieldValue); } } builder.AppendLine(string.Join(",", fieldValueList)); } return builder.ToString(); } } }