以下代码会产生令人困惑的结果。注意我来自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
混乱的位:
有一个属性命名计数和具有相同名称的扩展方法。通过调用Count()我希望调用扩展方法,但是该属性被访问。为什么以及如何调用一个方法?
我期望的扩展方法调用,但编译失败与BC32016(就像如果属性被访问,而不是方法)。这是为什么?
这按预期工作。
它只是从VB6继承的VB.Net语法,其中'result = list.Count'或'result = list.Count()'都会访问一个属性。当两者都存在于VB.Net中时,该属性总是被选中(只要该方法具有无参数过载)。 c#对此更明确,'result = list.Count;'或'result = list.Count();'将分别访问属性或方法。 – djv