2017-02-07 3 views
0

У меня есть класс.Как получить список с настраиваемым типом данных в построитель строк?

public class IdDetails 
{ 
    public string transactionDate { get; set; } 
    public string upnName { get; set; } 
    public string movementTrade { get; set; } 
    public string baseCurve { get; set; } 
    public string cTolerance { get; set; } 
    //17 more declarations below 
} 

Тогда я использовал его в качестве ТипДанных моего списка Interface

foreach(DataRow r in tbl1.Rows) 
{ 
    InterFace.Add(new IdDetails 
    { 
     transactionDate = Convert.ToDateTime(r["TransDate"]).ToString(@"MM/dd/yyyy"), 
     upnName = string.Empty 
     movementTrade = "incoming", 
     //... Somemore adding of values 
    } 
} 

Я попытался это reference. Тем не менее, я думаю, что это построение строк с одиночными данными внутри каждого элемента. я не знаю реальную терминологию для этого

Я попытался сделать это, как это, используя мою ссылку

var x = concatenate<IdDetails>(Interface, Convert.ToString, ';'); 

Но я не получаю результат мне нужно, Вместо этого я получаю там значения

//output im getting 
x = "DataImport2.IdDetails;" //<- this string repeated multiple times 

enter image description here

Вопрос: Как я могу напрямую написать содержимое моего настраиваемого списка в построитель строк? Без меня это превратится в другой объект. Потому что я могу отдать его DataTable и обработать его до StringBuilder. Это довольно длительный процесс и кодирование.

Надеюсь, кто-то может мне помочь.

ответ

1

Вы можете использовать string.Join() для достижения того, что вам нужно. Например

string.Join(",", Interface.Select(item => item.transactionDate + " " + item.xxx + // etc etc)); 

EDIT:

Override ToString() в IdDetails использовать Reflection, чтобы получить все значения своего класса.

public class IdDetails 
{ 
    public string transactionDate { get; set; } 
    public string upnName { get; set; } 
    public string movementTrade { get; set; } 
    public string baseCurve { get; set; } 
    public string cTolerance { get; set; } 

    private static string SafeString(object s) 
    { 
     return s == null ? string.Empty : s.ToString(); 
    } 

    public override string ToString() 
    { 
     PropertyInfo[] properties = typeof(IdDetails).GetProperties(); 
     return string.Join(",", properties.Select(prop => SafeString(prop.GetValue(this, null))).ToArray()); 
    } 

    //17 more declarations below 
} 
+0

Есть ли все равно, чтобы закорачивать или сокращать код 'item.transactionDate' и т. Д. И т. Д.? потому что его довольно длинный класс и может быть длиннее в зависимости от требования. – Hexxed

+0

Что бы я сделал, это 'override'' IdDetails' ToString() 'для возврата значений свойств, которые я хочу. Затем введите этот 'string.Join (", ", Interface.Select (item => item.ToString());' – JohanP

+0

Можете ли вы показать мне, как я могу переопределить его 'ToString()'? – Hexxed

Смежные вопросы