Эта универсальная вспомогательная функция выполняет итерацию по списку объектов, обращаясь к их общедоступным свойствам и выплескивая одну строку с разделителями-запятыми для каждого объекта.PropertyInfo.GetValue (obj, null) truncating strings
/// <summary>
/// Format the properties as a list of comma delimited values, one object row per.
/// </summary>
/// <typeparam name="T">Type of class contained in the List</typeparam>
/// <param name="list">A list of objects</param>
/// <returns>a list of strings in csv format</returns>
public static List<string> ToCSV<T>(this IEnumerable<T> list)
where T : class
{
var results = new List<string>();
bool firstTime = true;
foreach (var obj in list)
{
// header data
if (firstTime)
{
firstTime = false;
string line = String.Empty;
foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
{
if (propertyInfo.CanRead)
{
line += propertyInfo.Name + ',';
}
}
results.Add(line);
}
else
{
string line = String.Empty;
foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
{
if (propertyInfo.CanRead)
{
object value = propertyInfo.GetValue(obj, null);
if (value.GetType() == typeof(string))
{
line += "\"" + value.ToString() + "\"" + ",";
}
else
{
line += value.ToString() + ",";
}
}
}
results.Add(line);
}
}
return results;
}
Один из классов итерируемого этого метода имеет свойство строки, которая усекается:
string BusinessItem { get; set; } // "0000", a legitimate business value
Проблематика немного здесь:
object value = propertyInfo.GetValue(obj, null); // value == 0
Как получить значение свойства как строки, а не int?
Если свойство определено как строка, результатом будет строка. Что-то еще кажется немного выключенным. –
Да, я этого не покупаю. Номер '0000' эквивалентен числу' 0', поэтому нет смысла ожидать произвольное число '0'. Если это строка, то '' 0 "' много отличается от '' 0000 "'. Я думаю, что происходит что-то еще. –
Пожалуйста, предоставьте краткую, но * полную * программу, демонстрирующую проблему. –