2009-08-13 6 views
1

ich eine Erweiterung in VB.NET für String schrieb hinzufügen (eines der Argumente müssen, damit ich nicht für eine neue Zeile Zeichen verwenden), um eine AppendFormattedLine Methode:Wie portiere ich eine Erweiterung in VB.NET zu C#?

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 

Antwort

2

Hier ist der portierten Code, den ich kam mit:

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); 
    } 
} 

Hoffentlich wird dies für jemanden nützlich sein!

verbesserter code, danke joel, luke & jason.

+1

Die 'args' Parameter des vierten Verfahrens sollte als' params object [] args' deklariert werden. – LukeH

+0

Danke luke. Darf ich nachfragen, warum das so sein sollte? – Anders

+1

@Anders: vor allem, damit es mit der C# -Signatur übereinstimmt. Zweitens, weil es zusätzlichen syntaktischen Zucker liefert, können Sie einfach eine Menge von Objekten als eigenes Argument an die Methode übergeben, anstatt ein Array zu konstruieren. –

7

Ich würde nicht verschachtelt die string.Format() Anrufe so.

Wussten Sie, dass string.Format() einen neuen StringBuilder hinter den Kulissen erstellt und die Methode AppendFormat() aufruft? Mit der ersten Methode dort oben als Beispiel, soll dies viel effizienter:

sb.AppendFormat(format, arg0).Append(Environment.NewLine); 

Sie sollten auch die gleiche Änderung an Ihrem VB-Code machen.

+0

ausgezeichnet, vielen Dank dafür. Ich werde meinen Code aktualisieren. – Anders

+0

das ist ein schöner Fang. –

0

Ich habe noch nie Telerik Codewandler verwendet, aber hier ist, was es denkt:

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 
//======================================================= 
+0

Danke Chris, aber das geht nicht. Ich habe das gleiche Ding (selbe Konverter auch!) Zuerst getan, aber die Syntax für eine C# Erweiterung unterscheidet sich von der VB.NET ein wenig. Insbesondere [Extension()] ist nicht notwendig, 'this' muss dem ersten Argument vorangestellt werden (in diesem Fall das stringbuilder-Objekt). Danke für die Eingabe! – Anders

+0

Kein Problem. Ich wollte schon immer einen Grund haben, Teleriks Konverter zu testen. Ich denke, es ist am besten, es manuell mit Hilfe von SO zu machen. :-) –

+0

Es funktioniert die meiste Zeit, nur bestimmte Dinge werden nicht richtig umgesetzt. Wie du gesagt hast, das ist, wenn wir zu SO kommen! – Anders

Verwandte Themen