以下代碼會產生令人困惑的結果。注意我來自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