using System.Reflection;
namespace Egw.Core
{
public class Utils
{
///
/// Effettua salvataggio in file di un generico oggetto in formato CSV
///
///
///
///
/// Separatore da impiegare
///
public static async Task SaveToCsv(List 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();
// 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);
}
}
}