一个对象只能在linq查询中实例化一次吗?

时间:2016-01-01 10:20:13

标签: c# performance linq

我必须写一个C#脚本,我不得不担心三件事:性能,字符数和行数(只允许一个分号)。我需要连接一个字符串列表,这是我目前的方法(为了便于阅读,稍微修改了片段,更改了变量名称并添加了空格):

//note: stringList is of type List<string>

var builder = new StringBuilder();
string result = (from str in stringList select builder.Append("&q=" + str)).ToString();

这个问题是它有两行,所以它不起作用。有没有办法在LINQ查询中实例化字符串生成器?

此外,与简单的foreach循环相比,此查询的性能有多好? (我知道foreach不是一个选项,我只是要求将来参考)

3 个答案:

答案 0 :(得分:6)

你担心&#34;预优化&#34;不要提前过度思考。

根据您的查询,这是正确的方法:

var result = "&q" + String.Join("&q=", stringList);

答案 1 :(得分:4)

如果您想使用StringBuilder

,这会很有效
string result =
    stringList
        .Aggregate(new StringBuilder(), (sb, s) => sb.Append("&q=" + s))
        .ToString();

简单的答案是:

string result = String.Join("", stringList.Select(s => "&q=" + s));

答案 2 :(得分:2)

您根本不需要StringBuilder,这是代码的单行替换:

string result = string.Join("", from str in stringList select "&q=" + str));