private static string ReadItemIntoRow(FileExportSpecification spec, object item)
        {
            var columnDelimiter = spec.ColumnDelimiter;
            var sb = new StringBuilder();
            var allPropertyValues = spec.GetPropertiesForType(item.GetType()).Values.ToList();

            for (var i = 0; i < allPropertyValues.Count; i++)
            {
                var property = allPropertyValues[i];

                string formattedValue = property.GetFormattedValue(item);

                if (formattedValue.Contains(columnDelimiter))
                {
                    formattedValue = spec.OnDelimiterFoundInValue(property.PropertyName, columnDelimiter, formattedValue);
                }

                sb.Append(formattedValue);

                if (i < (allPropertyValues.Count - 1))
                {
                    sb.Append(columnDelimiter);
                }
            }

            return(sb.ToString());
        }
        private static string WriteTheHeader(Type type, FileExportSpecification spec)
        {
            var sb = new StringBuilder();
            var allPropertyValues = spec.GetPropertiesForType(type).Values.ToList();

            for (var i = 0; i < allPropertyValues.Count; i++)
            {
                var property = allPropertyValues[i];

                string formattedValue = property.GetFormattedHeader();
                sb.Append(formattedValue);

                if (i < (allPropertyValues.Count - 1))
                {
                    sb.Append(spec.ColumnDelimiter);
                }
            }

            return(sb.ToString());
        }