Join collection of objects into comma-separated string

前端 未结 11 1345
无人共我
无人共我 2020-12-07 19:22

In many places in our code we have collections of objects, from which we need to create a comma-separated list. The type of collection varies: it may be a DataTable from whi

11条回答
  •  情话喂你
    2020-12-07 19:40

    // using System.Collections;
    // using System.Collections.Generic;
    // using System.Linq
    
    public delegate string Indexer(T obj);
    
    public static string concatenate(IEnumerable collection, Indexer indexer, char separator)
    {
        StringBuilder sb = new StringBuilder();
        foreach (T t in collection) sb.Append(indexer(t)).Append(separator);
        return sb.Remove(sb.Length - 1, 1).ToString();
    }
    
    // version for non-generic collections
    public static string concatenate(IEnumerable collection, Indexer indexer, char separator)
    {
        StringBuilder sb = new StringBuilder();
        foreach (object t in collection) sb.Append(indexer((T)t)).Append(separator);
        return sb.Remove(sb.Length - 1, 1).ToString();
    }
    
    // example 1: simple int list
    string getAllInts(IEnumerable listOfInts)
    {
        return concatenate(listOfInts, Convert.ToString, ',');
    }
    
    // example 2: DataTable.Rows
    string getTitle(DataRow row) { return row["title"].ToString(); }
    string getAllTitles(DataTable table)
    {
        return concatenate(table.Rows, getTitle, '\n');
    }
    
    // example 3: DataTable.Rows without Indexer function
    string getAllTitles(DataTable table)
    {
        return concatenate(table.Rows, r => r["title"].ToString(), '\n');
    }
    

提交回复
热议问题