using System; using System.Collections; using System.Collections.Generic; using System.Text; namespace Developpez.Dotnet.Collections { /// /// Fournit des méthodes d'extension pour les types enumérables /// public static partial class EnumerableExtensions { #region FormatAll /// /// Renvoie une chaine contenant chaque élément de l'énumération formaté avec /// le format spécifié /// /// L'énumération à formater /// Le format à appliquer à chaque élément, par exemple "x2" ou "{0:x2}" /// Le séparateur à insérer entre chaque élément /// La chaine contenant tous les éléments formatés public static string FormatAll(this IEnumerable enumerable, string format, string separator) { if (format.IsNullOrEmpty()) { format = "{0}"; } else if (!(format.StartsWith("{0") && format.EndsWith("}"))) { format = "{0:" + format + "}"; } separator = separator ?? String.Empty; StringBuilder sb = new StringBuilder(); foreach (var item in enumerable) { sb.AppendFormat(format, item); sb.Append(separator); } sb.Remove(sb.Length - separator.Length, separator.Length); return sb.ToString(); } /// /// Renvoie une chaine contenant chaque élément de l'énumération formaté avec /// le delegate spécifié /// /// Type des éléments de la séquence /// L'énumération à formater /// Le delegate à appliquer à chaque élément pour le convertir en chaine de caractères /// Le séparateur à insérer entre chaque élément /// La chaine contenant tous les éléments formatés public static string FormatAll(this IEnumerable enumerable, Func formatter, string separator) { if (formatter == null) return enumerable.FormatAll((string)null, separator); separator = separator ?? String.Empty; StringBuilder sb = new StringBuilder(); foreach (var item in enumerable) { sb.Append(formatter(item)); sb.Append(separator); } sb.Remove(sb.Length - separator.Length, separator.Length); return sb.ToString(); } #endregion #region Conversion from/to CSV strings /// /// Convertit une liste en une chaîne CSV avec le séparateur spécifié /// /// Liste à convertir /// Séparateur à utiliser /// Une chaine CSV représentant les éléments de la liste public static string ToCsvString(this IEnumerable list, string separator) { StringBuilder sb = new StringBuilder(); foreach (object o in list) { if (sb.Length > 0) sb.Append(separator); sb.Append(o); } return sb.ToString(); } /// /// Convertit une chaine CSV en une liste d'objets du type spécifié /// /// Type des éléments de la liste /// Chaîne CSV à convertir /// Séparateur à utiliser /// Une liste contenant les éléments de la chaîne CSV public static IEnumerable ListFromCsv(this string source, string separator) { List lst = new List(); string[] sItems = source.Split(new[] { separator }, StringSplitOptions.None); foreach (string sItem in sItems) { T item; if (string.IsNullOrEmpty(sItem)) { item = default(T); } else { item = (T)Convert.ChangeType(sItem, typeof(T)); } lst.Add(item); } return lst; } #endregion } }