我正在尝试在一些VB.Net代码中使用lambdas,本质上我是在调用数据绑定时尝试设置标志。
简化它看起来像这样:
Dim dropdownlist As New DropDownList()
dropdownlist.DataSource = New String() {"one", "two"}
Dim databoundCalled As Boolean = False
AddHandler dropdownlist.DataBound, Function(o, e) (databoundCalled = True)
dropdownlist.DataBind()
我的理解是databoundCalled变量应该设置为true,显然我遗漏了一些东西,因为变量总是保持为假。
我需要做些什么来解决它?
答案 0 :(得分:7)
在查看代码并摸不着头脑之后,我找到了一个有效的解决方案。现在,为什么这对你所拥有的东西起作用,我不清楚。也许这至少会帮助你朝着正确的方向前进。关键的区别是我有一个方法将值设置为true / false。其他一切都是一样的。
这是我的整个网络项目代码:
Partial Public Class _Default
Inherits System.Web.UI.Page
Dim databoundCalled As Boolean = False
Dim dropdownlist As New DropDownList()
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.Write(databoundCalled)
Bind()
Response.Write(databoundCalled)
End Sub
Sub Bind()
AddHandler dropdownlist.DataBound, Function(o, e) (SetValue(True))
dropdownlist.DataSource = New String() {"one", "two"}
dropdownlist.DataBind()
End Sub
Function SetValue(ByVal value As Boolean) As Boolean
databoundCalled = value
Return value
End Function
End Class
我希望这有帮助!
答案 1 :(得分:3)
vb.net中的单行Lambdas总是表达式,你的lambda表达式正在做的基本上是说databoundCalled = True或(databoundCalled == True)如果你是一个c#guy,没有设置databoundCalled = True
答案 2 :(得分:1)
问题在于如何解释lambdas。在VS2008中,函数lambda始终被解释为表达式而不是语句。以下面的代码块为例
Dim x = 42
Dim del = Function() x = 32
del()
在这种情况下,lambda del中的代码不进行赋值。而是在变量x和值32之间进行比较。原因是VB没有表达式的赋值概念,只有一个语句可以是VB中的赋值。
为了在lambda表达式中进行赋值,您必须具有语句功能。这将在VS2010之前无法使用,但是当它可以执行以下操作时
Dim del = Function()
x = 32
End Function
基本上任何不是单行lambda的东西都被解释为语句。