У VB.NET есть анонимные функции?
Из того, что я могу найти в google, VB.NET имеет только однозадачные lambdas, а не анонимные функции с несколькими заявлениями. Тем не менее, все прочитанные статьи говорили о старых версиях VB.NET, я не мог найти ничего более недавнего, чем vs2008 beta 1 или 2.
Итак, вопрос: как это сделать в VB.NET?
Код С#:
private void HandleErrors( Action codeBlock ){
try{
codeBlock();
}catch(Exception e){
//log exception, etc
}
}
HandleErrors(() => {
var x = foo();
x.DoStuff();
etc
});
Ответы
Ответ 1
Это делается в 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
Ответ 2
Visual Basic.NET имеет только лямбда-выражения.
Он не поддерживает "анонимных делегатов" в текущей версии, хотя в VS2010 он будет (и на нескольких строках).
В настоящее время единственным вариантом является объявить ваш метод где-то и передать его с помощью оператора Addressof.
Ответ 3
VB9 имеет только однострочные анонимные функции. Мы добавляем полный оператор и многострочный lambdas в VB10.
Ответ 4
в этом примере у меня есть список операций, но вы хотите найти его только из списка (из T), где совпадают идентификаторы:
Return operations.Find(Function(p) p.OperationID = operationID)
operationID - это локальная переменная, переданная в метод, а операции - общий список.
Ответ 5
Аноним не является делегатом или функцией
это сильный динамический тип
вы можете использовать общие функции
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
Ответ 6
Это неточно. У 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)