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 甚至不会显示还有其他的。我试过只有两个 ToString 之一没有变量输入

为什么是这样?

我正在使用具有不同类的类似设置,并且效果很好。据我所知,我没有在语法方面做任何错误的事情。

4

1 回答 1

3

.NET 中的每个类都继承ToString()自根基类object。与成员方法具有完全相同签名的扩展方法不会显示,也不能使用扩展方法语法调用。

于 2012-04-18T10:44:50.387 回答