写老派最有效的方法是什么:
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吗?
写老派最有效的方法是什么:
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吗?
当前回答
你可以在聚合中使用StringBuilder:
List<string> strings = new List<string>() { "one", "two", "three" };
StringBuilder sb = strings
.Select(s => s)
.Aggregate(new StringBuilder(), (ag, n) => ag.Append(n).Append(", "));
if (sb.Length > 0) { sb.Remove(sb.Length - 2, 2); }
Console.WriteLine(sb.ToString());
(选择在那里只是为了显示你可以做更多的LINQ的东西。)
其他回答
您看过聚合扩展方法了吗?
var sa = (new[] { "yabba", "dabba", "doo" }).Aggregate((a,b) => a + "," + b);
你可以在聚合中使用StringBuilder:
List<string> strings = new List<string>() { "one", "two", "three" };
StringBuilder sb = strings
.Select(s => s)
.Aggregate(new StringBuilder(), (ag, n) => ag.Append(n).Append(", "));
if (sb.Length > 0) { sb.Remove(sb.Length - 2, 2); }
Console.WriteLine(sb.ToString());
(选择在那里只是为了显示你可以做更多的LINQ的东西。)
你可以非常有效地结合LINQ和string.join()。这里我正在从字符串中删除一个项。当然也有更好的方法,下面就是:
filterset = String.Join(",",
filterset.Split(',')
.Where(f => mycomplicatedMatch(f,paramToMatch))
);
我之前写过一篇博客,我所做的正是你想要的:
http://ondevelopment.blogspot.com/2009/02/string-concatenation-made-easy.html
在博客文章中描述了如何实现工作在IEnumerable上的扩展方法,并命名为Concatenate,这将允许您编写如下内容:
var sequence = new string[] { "foo", "bar" };
string result = sequence.Concatenate();
或者更复杂的事情,比如:
var methodNames = typeof(IFoo).GetMethods().Select(x => x.Name);
string result = methodNames.Concatenate(", ");
为什么使用Linq?
string[] s = {"foo", "bar", "baz"};
Console.WriteLine(String.Join(", ", s));
这是完美的工作,并接受任何IEnumerable<string>,据我所知。不需要在这里聚合任何东西,这是非常慢的。