/// <summary> /// Saves the csv file to the specified <see cref="StreamWriter"/>. /// </summary> /// <param name="streamWriter">The output <see cref="StreamWriter"/>.</param> /// <param name="cultureInfo">The output culture.</param> /// <param name="unitProvider">The unit provider.</param> public void Save(StreamWriter streamWriter, CultureInfo cultureInfo = null, IUnitProvider unitProvider = null) { if (unitProvider == null) { unitProvider = UnitProvider.Default; } if (cultureInfo == null) { cultureInfo = unitProvider.Culture ?? CultureInfo.InvariantCulture; } var separator = cultureInfo.TextInfo.ListSeparator; for (int i = 0; i < this.Columns.Count; i++) { if (i > 0) { streamWriter.Write(separator); } streamWriter.Write(this.Columns[i]); } var displayUnit = this.Columns.Select( c => { var qt = GetQuantityType(c.Type); string symbol; return(qt != null ? unitProvider.GetDisplayUnit(qt, out symbol) : null); }).ToList(); streamWriter.WriteLine(); for (int j = 0; j < this.Rows.Count; j++) { if (j > 0) { streamWriter.WriteLine(); } for (int i = 0; i < this.Columns.Count; i++) { if (i > 0) { streamWriter.Write(separator); } var value = this.Rows[j].Values[i]; if (Csv.IsUndefined(value)) { continue; } var q = value as IQuantity; streamWriter.Write( q != null ? string.Format(cultureInfo, "{0}", q.ConvertTo(displayUnit[i])) : string.Format(cultureInfo, "{0}", value)); } } }