写老派最有效的方法是什么:

StringBuilder sb = new StringBuilder();
if (strings.Count > 0)
{
    foreach (string s in strings)
    {
        sb.Append(s + ", ");
    }
    sb.Remove(sb.Length - 2, 2);
}
return sb.ToString();

...在LINQ吗?


当前回答

你可以非常有效地结合LINQ和string.join()。这里我正在从字符串中删除一个项。当然也有更好的方法,下面就是:

filterset = String.Join(",",
                        filterset.Split(',')
                                 .Where(f => mycomplicatedMatch(f,paramToMatch))
                       );

其他回答

您看过聚合扩展方法了吗?

var sa = (new[] { "yabba", "dabba", "doo" }).Aggregate((a,b) => a + "," + b);

我对字符串进行了基准测试。使用BDN在15个字符串数组上Join vs .Aggregate:

Method Mean Error StdDev Gen0 Allocated
String_Join 92.99 ns 9.905 ns 0.543 ns 0.0560 352 B
LING_Aggregate 406.00 ns 74.662 ns 4.092 ns 0.4640 2912 B

阵列越大,间隔越大

return string.Join(", ", strings.ToArray());

在。net 4中,有一个新的重载字符串。接受IEnumerable<string>的连接。代码将如下所示:

return string.Join(", ", strings);

StringBuilder vs Select & Aggregate case超过3000个元素的快速性能数据:

单元测试——持续时间(秒) LINQ_StringBuilder - 0.0036644 LINQ_Select。聚合- 1.8012535

    [TestMethod()]
    public void LINQ_StringBuilder()
    {
        IList<int> ints = new List<int>();
        for (int i = 0; i < 3000;i++ )
        {
            ints.Add(i);
        }
        StringBuilder idString = new StringBuilder();
        foreach (int id in ints)
        {
            idString.Append(id + ", ");
        }
    }
    [TestMethod()]
    public void LINQ_SELECT()
    {
        IList<int> ints = new List<int>();
        for (int i = 0; i < 3000; i++)
        {
            ints.Add(i);
        }
        string ids = ints.Select(query => query.ToString())
                         .Aggregate((a, b) => a + ", " + b);
    }

为什么使用Linq?

string[] s = {"foo", "bar", "baz"};
Console.WriteLine(String.Join(", ", s));

这是完美的工作,并接受任何IEnumerable<string>,据我所知。不需要在这里聚合任何东西,这是非常慢的。