هذه مأخوذة من مقالة تتحدث عن النسخة ما قبل النسخة التجريبية
تعابير لمدا متعددة الأسطر
تعابير لمدا المتعددة الأسطر هي تعابير لمدا تمثل إجرائية تحتوي على تعبير أو أكثر كما في المثال
Dim nums() As Integer = {1, 2, 3, 4, 5}
nums = Array.FindAll(nums, Function(n)
Console.WriteLine("testing " & n)
Return n > 2
End Function)وتماما كتعابير لمدا الاعتيادية فالمترجم سيستدل على نوع كل محدد عندما يكون ذلك ممكنا كما سيستدل أيضا على النوع المعاد من تعبير لمدا باستخدام ألغوريتم النوع المسيطر للاختيار بين الأنواع المعادة من كل تعبير Return انظر المثال
'numDelegate is an anonymous delegate compatible with Func(Of Integer, Double) Dim numDelegate = Function(n As Integer) If n Mod 2 = 0 Then Return 3 Else Return 3.14 End If End Function
ففي هذه الحالة يرى المترجم أن النوع المعاد قد يكون Integer أو Double وبهذا فإنه يختار Double بما أن مجاله أعرض من Integer كما يمكنك تحديد النوع المعاد من التعبير باستخدام قسم As ففي هذه الحالة سيستخدم المترجم النوع الذي قمت بتحديده ولن يقوم بمحاولة الاستدلال على النوع المعاد من التعبير
Dim lambda = Function(n As Integer) As Single If n Mod 2 = 0 Then Return 3 Else Return 3.14 End If End Function
تعابير لمدا كإجراءات
تماما كما نستخدم الكلمة المحجوزة Function لإنشاء تعبير لمدا متعدد الأسطر تعيد قيمة يمكن استخدام الكلمة المحجوزة Sub لإنشاء تعبير لمدا لا يعيد قيمة
Array.ForEach(nums, Sub(n)
Console.Write("Number: ")
Console.WriteLine(n)
End Sub)تعابير لمدا الإجرائية وحيدة السطر
يدعم visual Basic 9.0 تعابير لمدا وحيدة السطر التي تعيد قيمة فالكود التالي سيعيد خطأ على النسخة 9.0
'Error - Console.WriteLine doesn't return a value Array.ForEach(nums, Function(n) Console.WriteLine(n))
والآن مع Visual Basic 10.0 أصبح يمكن كتابة تعابير لمدا لا تعيد قيمة كما في المثال
'Valid Array.ForEach(nums, Sub(n) Console.WriteLine(n)) 'Valid