1

次のコードがあります

Module StringExtensions

<Extension()>
Public Function ToString(ByVal e As Elements) As String
    Return e(0).ToString()
End Function

<Extension()>
Public Function ToString(ByVal e As List(Of Element)) As String
    e.ToString("|")
End Function

<Extension()>
Public Function ToString(ByVal e As List(Of Element), ByVal delim As String = "|") As String
    Dim s As String = ""
    For Each e1 As Element In e
        s = String.Join(delim, s, IIf(e1.Terminal, "!", "") & e1.Name)
    Next e1
    Return s.TrimStart(delim).TrimEnd(delim)
End Function

End Module

Class Elements
Inherits List(Of Element)
'...Various properties and methods
End Class
Class Element
'...Various Properties and methods
End Class

私の質問:

何らかの理由で、 delim 変数を持つ ToString 拡張のみを呼び出すことができます。VS2010 は、他に存在することさえ示しません。変数入力のない2つのToStringのうちの1つだけを試してみました

どうしてこれなの?

私は別のクラスで同様のセットアップを使用していますが、これは正常に機能します。私の知る限り、構文に関して間違ったことは何もしていません。

4

1 に答える 1

3

.NET のすべてのクラスはToString()、ルート基本クラスから継承しますobject。メンバー メソッドとまったく同じシグネチャを持つ拡張メソッドは表示されず、拡張メソッド構文を使用して呼び出すことはできません。

于 2012-04-18T10:44:50.387 に答える