用于在C#中追加集合的StringBuilder扩展方法

Lan*_*her 5 c# generics lambda stringbuilder

在C#中,我正在尝试为StringBuilder构建一个名为AppendCollection()的扩展方法,它可以让我这样做:

var sb1 = new StringBuilder();
var sb2 = new StringBuilder();
var people = new List<Person>() { ...init people here... };
var orders = new List<Orders>() { ...init orders here... };

sb1.AppendCollection(people, p => p.ToString());
sb2.AppendCollection(orders, o => o.ToString());

string stringPeople = sb1.ToString();
string stringOrders = sb2.ToString();
Run Code Online (Sandbox Code Playgroud)

stringPeople最终会为列表中的每个人添加一行.每一行都是p.ToString()的结果.同样对于stringOrders.我不太清楚如何编写代码来使lambdas与泛型一起工作.

Meh*_*ari 10

使用Func<T,string>委托.

public static void AppendCollection<T>(this StringBuilder sb, 
                                       IEnumerable<T> collection, Func<T, string> method) {
   foreach(T x in collection) 
       sb.AppendLine(method(x));
}
Run Code Online (Sandbox Code Playgroud)


BFr*_*ree 5

 public static void AppendCollection<T>(this StringBuilder builder, IEnumerable<T> list, Func<T,string> func)
        {
            foreach (var item in list)
            {
                builder.AppendLine(func(item));
            }
        }
Run Code Online (Sandbox Code Playgroud)

我不会返回一个字符串,我只是将它附加到传入的原始Stringbuilder中.