2009-08-13 15 views
1

私は(私は改行文字の引数のいずれかを使用する必要はありません)AppendFormattedLineメソッドを追加するのStringBuilderのためのVB.NETでの拡張を書いた:ここVB.NETの拡張機能を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 

答えて

2

はそのI移植されたコードです次のものが登場しました:

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

これは誰かにとって役に立ちそうです。

改善コード、thanks joel、luke & jason。

+1

第四の方法の 'args'パラメータはのparamsオブジェクト[] args''として宣言する必要があります。 – LukeH

+0

ありがとうございました。なぜこれがすべきかについて私は尋ねることができますか? – Anders

+1

@アンダー:まず、それがc#のシグネチャと一致するようにします。第2に、構文上の余分な砂糖を提供するため、配列を作成するのではなく、オブジェクトの束を独自の引数としてメソッドに渡すことができます。 –

7

私はstring.Format()のような呼び出しをネストしません。

string.Format()は新しいStringBuilderを作成し、それをAppendFormat()メソッドと呼びますか?例として上の最初の方法を使用すると、これははるかに効率的でなければなりません:

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

VBコードも同様に変更する必要があります。

+0

優秀、これをありがとうございます。コードを更新します。 – Anders

+0

これは素晴らしいキャッチです。 –

0

私は前に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 
//======================================================= 
+0

ありがとう、クリス、しかしこれは動作しません。私は実際には全く同じことをしましたが(同じコンバータも同じです!)、最初はC#拡張のシンタックスはVB.NETのものと少し異なります。特に、[Extension()]は不要で、 'this'は最初の引数(この場合はstringbuilderオブジェクト)の前に付ける必要があります。しかし、入力をありがとう! – Anders

+0

問題ありません。私はいつもTelerikのコンバータをテストする理由があると思っていました。私はそれがSOの助けを借りて手で行うのが最善だと思います。 :-) –

+0

ほとんどの場合、正しく変換されていないものがあります。あなたが言ったように、それは私たちが来たときです! – Anders

関連する問題