无法在列表

时间:2017-08-31 14:49:51

标签: vb.net ienumerable

以下代码会产生令人困惑的结果。注意我来自C#背景,并且对VB知之甚少。

Module Module1
Sub Main()
    Dim list As List(Of String) = New List(Of String)()
    Dim result As Integer

    result = list.Count() '1
    result = list.Count(Function(p) True) '2
    result = CType(list, IEnumerable(Of String)).Count(Function(p) True) '3
End Sub
End Module

令人困惑的地方:

  1. 有一个名为Count的属性和一个具有相同名称的扩展方法。通过调用Count(),我希望调用扩展方法,但访问该属性。为什么以及如何调用方法?

  2. 我期待扩展方法调用,但编译失败了BC32016(就好像访问了属性而不是方法)。那是为什么?

  3. 这可以按预期工作。

1 个答案:

答案 0 :(得分:1)

我认为这是VB的限制,因为这样做并不能编译。 A已经是属性,无法使用相同名称的方法。

Class Test

    Public Property A As Integer

    Public Function A(ByVal b As String) As Integer
        Return 0
    End Function

End Class

您还有其他选择。

    Enumerable.Count(list, Function(p) True)
    list.AsEnumerable.Count(Function(p) True)