Files
mapo-core/Egw.Core/Utils.cs
T

38 lines
1.4 KiB
C#

using System.Reflection;
namespace Egw.Core
{
public class Utils
{
/// <summary>
/// Effettua salvataggio in file di un generico oggetto in formato CSV
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="reportData"></param>
/// <param name="path"></param>
/// <param name="separator">Separatore da impiegare</param>
/// <returns></returns>
public static async Task SaveToCsv<T>(List<T> reportData, string path, char separator)
{
// 1. Recuperiamo le proprietà del tipo T una sola volta (Risolve i problemi di performance)
PropertyInfo[] properties = typeof(T).GetProperties();
var lines = new List<string>();
// 2. Creiamo l'header usando il separatore corretto (Risolve il bug del ";" fisso)
var header = string.Join(separator, properties.Select(p => p.Name));
lines.Add(header);
// 3. Estraiamo i valori gestendo i possibili null (Risolve il tuo warning)
var valueLines = reportData
.Where(row => row != null)
.Select(row => string.Join(separator, properties.Select(p => p.GetValue(row)?.ToString() ?? string.Empty)));
lines.AddRange(valueLines);
// 4. Utilizziamo il metodo di scrittura asincrono nativo di .NET
await File.WriteAllLinesAsync(path, lines);
}
}
}