从我在谷歌上找到的,VB.NET只有一个语句lambdas,而不是多语句匿名函数。但是,我读到的所有文章都在谈论旧版本的VB.NET,我找不到比vs2008 beta 1或2更新的文章。
所以问题:如何在VB.NET中执行此操作?
C#代码:
private void HandleErrors( Action codeBlock ){
try{
codeBlock();
}catch(Exception e){
//log exception, etc
}
}
HandleErrors(() => {
var x = foo();
x.DoStuff();
etc
});
答案 0 :(得分:28)
它在VB10中实现:
Dim food = New With {
.ID = 1,
.Name = "Carrot",
.Type = (
Function(name As String)
If String.IsNullOrEmpty(name) Then Return String.Empty
Select Case name.ToLower()
Case "apple", "tomato": Return "Fruit"
Case "potato": Return "Vegetable"
End Select
Return "Meat"
End Function
)(.Name)
}
Dim type = food.Type
答案 1 :(得分:18)
Visual Basic .NET只有lambda表达式。
它不支持当前版本中的“匿名委托”,尽管它会在VS2010中(以及在多行上)。
现在唯一的选择是在某处声明您的方法并使用Addressof运算符传递它。
答案 2 :(得分:9)
VB9只有单行匿名函数。我们在VB10中添加完整语句和多行lambdas。
答案 3 :(得分:0)
在这个例子中,我有一个操作列表,但只想从ID匹配的列表中找到一个:
Return operations.Find(Function(p) p.OperationID = operationID)
operationID是传递给方法的局部变量,操作是通用列表。
答案 4 :(得分:0)
匿名不是代表或功能 它是一个强大的动力类型
您可以使用通用功能
Sub Main()
Dim PersonDynamicType = AnonyFunc(New With {.Name = "david", .Family = "Fisher"})
Console.Write(PersonDynamicType.Name)
End Sub
Function AnonyFunc(Of t)(v As t) As t
Return v
End Function
答案 5 :(得分:-4)
这是不准确的。 VB.NET确实有匿名方法。这是一个例子:
Private Function JsonToObject(Of T)(Value As String) As T
Dim JavaScriptSerializer As New System.Web.Script.Serialization.JavaScriptSerializer()
Return JavaScriptSerializer.Deserialize(Of T)(Value)
End Function
Dim People As Generic.List(Of Person) = JsonToObject(Of Generic.List(Of Person))(Json)