Я написал расширение в VB.NET для StringBuilder, чтобы добавить метод AppendFormattedLine
(поэтому мне не пришлось бы использовать один из аргументов для нового символа строки):
Imports System.Runtime.CompilerServices
Public Module sbExtension
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal arg0 As Object)
oStr.AppendFormat(format, arg0).Append(ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, ByVal arg0 As Object, _
ByVal arg1 As Object)
oStr.AppendFormat(format, arg0, arg1).Append(ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal arg0 As Object, _
ByVal arg1 As Object, _
ByVal arg2 As Object)
oStr.AppendFormat(format, arg0, arg1, arg2).Append(ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal ParamArray args() As Object)
oStr.AppendFormat(format, args).Append(ControlChars.NewLine)
End Sub
End Module
Вот портированный код, с которым я столкнулся:
using System;
using System.Text;
public static class ExtensionLibrary
{
public static void AppendFormattedLine(this StringBuilder sb, string format, object arg0)
{
sb.AppendFormat(format, arg0).Append(Environment.NewLine);
}
public static void AppendFormattedLine(this StringBuilder sb, string format, object arg0, object arg1)
{
sb.AppendFormat(format, arg0, arg1).Append(Environment.NewLine);
}
public static void AppendFormattedLine(this StringBuilder sb, string format, object arg0, object arg1, object arg2)
{
sb.AppendFormat(format, arg0, arg1, arg2).Append(Environment.NewLine);
}
public static void AppendFormattedLine(this StringBuilder sb, string format, params object[] args)
{
sb.AppendFormat(format, args).Append(Environment.NewLine);
}
}
Надеюсь, это пригодится кому-то!
улучшенный код, спасибо joel, luke и jason.
Я бы не вложил вызовы string.Format()
вроде этого.
Знаете ли вы, что string.Format()
создает новый StringBuilder за кулисами и вызывает его AppendFormat()
метод? Используя первый метод там, как пример, это должно быть намного более эффективным:
sb.AppendFormat(format, arg0).Append(Environment.NewLine);
Вы также должны внести такое же изменение в свой код VB.
Я никогда раньше не использовал конвертер кода Telerik, но вот что он думает:
public class sbExtension
{
[Extension()]
public void AppendFormattedLine(System.Text.StringBuilder oStr, string format, object arg0)
{
oStr.AppendFormat(format, arg0).Append(ControlChars.NewLine);
}
[Extension()]
public void AppendFormattedLine(System.Text.StringBuilder oStr, string format, object arg0, object arg1)
{
oStr.AppendFormat(format, arg0, arg1).Append(ControlChars.NewLine);
}
[Extension()]
public void AppendFormattedLine(System.Text.StringBuilder oStr, string format, object arg0, object arg1, object arg2)
{
oStr.AppendFormat(format, arg0, arg1, arg2).Append(ControlChars.NewLine);
}
[Extension()]
public void AppendFormattedLine(System.Text.StringBuilder oStr, string format, params object[] args)
{
oStr.AppendFormat(format, args).Append(ControlChars.NewLine);
}
}
//=======================================================
//Service provided by Telerik (www.telerik.com)
//Conversion powered by NRefactory.
//Built and maintained by Todd Anglin and Telerik
//=======================================================
args
четвертого метода должен быть объявлен какparams object[] args
.