C# 使用string.concat或string builder更好吗?
使用string.concat或string builder更好吗?有人能解释一下在什么情况下我应该使用这两个吗 有一个问题解释了性能,我想知道在哪里使用string.concat,在哪里避免它 提前感谢。您可以从参考资料中看到C# 使用string.concat或string builder更好吗?,c#,string,C#,String,使用string.concat或string builder更好吗?有人能解释一下在什么情况下我应该使用这两个吗 有一个问题解释了性能,我想知道在哪里使用string.concat,在哪里避免它 提前感谢。您可以从参考资料中看到 [ComVisible(false)] 公共静态字符串Concat(IEnumerable值){ 如果(值==null) 抛出新的ArgumentNullException(“值”); Contract.sure(Contract.Result()!=null); C
[ComVisible(false)]
公共静态字符串Concat(IEnumerable值){
如果(值==null)
抛出新的ArgumentNullException(“值”);
Contract.sure(Contract.Result()!=null);
Contract.EndContractBlock();
StringBuilder结果=StringBuilderCache.Acquire();
使用(IEnumerator en=values.GetEnumerator()){
while(en.MoveNext()){
如果(en.Current!=null){
结果追加(en.Current);
}
}
}
返回StringBuilderCache.GetStringAndRelease(结果);
}
String.Concat
使用StringBuilder
这就是为什么两种方法大致相同的原因。另外,如果您有一个已知大小的字符串集合,您可以使用StringBuilder
并通过长度总和初始化其容量-这将节省增加StringBuilder
的内部缓冲区大小所需的一些时间<正如您在Dmitry的评论中所看到的,code>String.Concat不这样做。String.Concat
使用StringBuilder
来完成它的工作。因此,如果您有一个包含多个字符串的操作,我更喜欢string.Concat
,因为它的语法更短
var result = string.Concat("abc", "def");
如果必须执行多个操作,则应使用一个StringBuilder
实例以提高性能(因为每次多个string.Concat
调用都会实例化它们自己的StringBuilder
)
var builder=new StringBuilder();
for(int i=0;i
String.Concat
使用StringBuilder
,因此,如果您在循环中串联或对Concat()进行大量单独调用,则它们大致相等,否则,如果您已经拥有所有要关联的值,则可以使用String.Concat()(在列表
或字符串[]
或另一种IEnumerable
中)使用String.Concat
。如果需要确定要附加的字符串(例如,在具有附加逻辑的循环中)使用您自己的StringBuilder
。否则您将在Concat
中创建许多不必要的StringBuilder
-实例。您提供的链接是否已经有了答案?当对string.Concat()进行许多单独调用时,这并不能解决常见模式
,例如在循环中调用时。在这种情况下,应使用StringBuilder
。我在项目中的一些地方使用string.concat在消息框控件中生成错误消息。错误消息使用不同的值,因此我无法使用通用方法或字符串生成器。我在这里使用string.concat是正确的?@Nisha:如果您需要多个string.Concat操作来创建结果字符串,则首选StringBuilder。如果所有操作都可以在一个操作中将多个字符串连接在一起,则string.Concat更易于阅读。哦,好的,我现在就知道了。谢谢。
var result = string.Concat("abc", "def");
var builder = new StringBuilder();
for (int i = 0; i < numberOfOperations; i++)
{
builder.Append(getStringResult());
}