2
我是VB.net的新手,目前正在編寫一些常見構造的代碼示例(這不會有任何意義),我可能需要在即將推出的項目中使用。我有lambda表達式一類爲屬性,它看起來像這樣:vb.net lambda太多的參數
Namespace SampleClasses
Public Class Lambdas
Public Shared ReadOnly Property AddFromZeroUpTo As Func(Of Integer, Integer)
Get
Return Function(upTo As Integer) Enumerable.Range(0, upTo + 1).Sum()
End Get
End Property
Public Shared ReadOnly Property ShowMessageBox As Action(Of String)
Get
Return Function(text As String) MessageBox.Show(text)
End Get
End Property
End Class
End Namespace
現在,當我嘗試調用這些lambda表達式一些線工作,有的不會,我真的不知道爲什麼。
SampleClasses.Lambdas.ShowMessageBox()(SampleClasses.Lambdas.AddFromZeroUpTo(8)) 'works
SampleClasses.Lambdas.ShowMessageBox(SampleClasses.Lambdas.AddFromZeroUpTo(8)) 'wont work
SampleClasses.Lambdas.AddFromZeroUpTo(8) 'wont work
SampleClasses.Lambdas.AddFromZeroUpTo()(8) 'works
Dim msg = SampleClasses.Lambdas.ShowMessageBox
msg(SampleClasses.Lambdas.AddFromZeroUpTo(8)) 'works
我真的在這個行爲難倒和不知道爲什麼這樣的行爲就這樣,感謝您的任何建議要尋找什麼,或解釋。
在VB.NET中(與C#不同),屬性可以有參數。所以語法是不明確的,當你使用AddFromZeroUpTo(8)時,編譯器認爲你正在試圖傳遞8給屬性getter。你必須通過使用()(8)來解決模糊性,現在編譯器確信你打算把8傳遞給委託。那麼,清理這裏窗口的語法。 –