我在google搜索最佳c#字符串连接,我在microsoft c#代码约定中找到了这个: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions
使用
+
运算符连接短字符串,如下面的代码所示:
string displayName = nameList[n].LastName + ", " + nameList[n].FirstName;
但我更喜欢(String.Format
)“$
”以获得更多可读性恕我直言:
string firstName = "MyName";
string lastName = "MyLastName";
string displayName = $"{lastName}, {firstName}";
Console.WriteLine(displayName); // "MyLastName, MyName"
你能告诉我你觉得哪一个更好吗?或仅仅是个人偏好?
谢谢!
答案 0 :(得分:2)
使用StringBuilder
获得最佳效果。
String.Format
也很好,但不能完全取代字符串上的“+”运算符。
StringBuilder builder = new StringBuilder();
// Append to StringBuilder.
for (int i = 0; i < 10; i++)
{
builder.Append(i).Append(" ");
}
Console.WriteLine(builder);
请记住导入名称空间:
using System.Text;
答案 1 :(得分:1)
如果性能是关键字符串连接更好,因为它总是胜过构建字符串的其他方法
但是,与String.Format相比,字符串连接占用更多内存所以连接字符串的最佳方法是使用String.Format
或System.Text.StringBuilder
对象
答案 2 :(得分:1)
这已经超过一年了,但是在Google的搜索结果中排名最高。最初我是这样做的:
StringBuilder builder = new StringBuilder();
// Append to StringBuilder.
for (int i = 0; i < 10; i++)
{
builder.Append(i + " ");
}
Console.WriteLine(builder);
然后,我认为这可能已经超出了使用StringBuilder
的地步。我开始这样做
StringBuilder builder = new StringBuilder();
// Append to StringBuilder.
for (int i = 0; i < 10; i++)
{
builder.Append(i);
builder.Append(" ");
}
Console.WriteLine(builder);
最后,我意识到我可以像@Habeeb这样将方法链接起来。我想知道是否有任何性能上的好处。
$e1 = [Text.StringBuilder]::new()
$e2 = [Text.StringBuilder]::new()
function ef1(){
Write-Host "Start Date:" (Get-Date)
for($i=0;$i -lt 100000;$i++){
$e1.Append("Hello") | Out-Null
$e1.AppendLine($i.ToString()) | Out-Null
$e1.Append("World") | Out-Null
$e1.AppendLine($i.ToString()) | Out-Null
$e1.Append("More Lines") | Out-Null
$e1.AppendLine($i.ToString()) | Out-Null
}
}
function ef2(){
Write-Host "Start Date:" (Get-Date)
for($i=0;$i -lt 100000;$i++){
$e1.Append("Hello").AppendLine($i.ToString()).Append("World").AppendLine($i.ToString()).Append("More Lines").AppendLine($i.ToString()) | Out-Null
}
Write-Host "End Date:" (Get-Date)
}
这是一个粗略的比较,我知道它在PS中。但是,ef1
导致17秒,ef2
导致3秒(此处不考虑毫秒)。除非我没有记错,否则链接方法会疯狂地提高性能。 (是的,这可能不是StringBuilder
独有的,但是StringBuilder
促使我提出了这个问题。)
更新:
由于@ cogumel0,我现在意识到Out-Null
有多昂贵。将迭代次数增加一位数字会显示ef1
大约需要4秒,而ef2
大约需要1秒。 (我还为ef1
添加了丢失的写结束日期。)
$e1 = [Text.StringBuilder]::new()
$e2 = [Text.StringBuilder]::new()
function ef1(){
Write-Host "Start Date:" (Get-Date)
for($i=0;$i -lt 1000000;$i++){
[void] $e1.Append("Hello")
[void] $e1.AppendLine($i.ToString())
[void] $e1.Append("World")
[void] $e1.AppendLine($i.ToString())
[void] $e1.Append("More Lines")
[void] $e1.AppendLine($i.ToString())
}
Write-Host "Start Date:" (Get-Date)
}
function ef2(){
Write-Host "Start Date:" (Get-Date)
for($i=0;$i -lt 1000000;$i++){
[void] $e1.Append("Hello").AppendLine($i.ToString()).Append("World").AppendLine($i.ToString()).Append("More Lines").AppendLine($i.ToString())
}
Write-Host "End Date:" (Get-Date)
}