views:

43

answers:

2

I found that this answer was asked and answered before VS2010 was actually released.

They say that

VB9 has only single-line anonymous functions. We're adding full statement and multi-line lambdas in VB10.

But I tried to add this code

 Dim test2 = Function(t1 As T, t2 As T) (
 Dim val1 As IComparable = DirectCast(prop.GetValue(t1), IComparable)
 Dim val2 As IComparable = DirectCast(prop.GetValue(t2), IComparable)
 Return val1.CompareTo(val2)
 )

to a .NET Framework 4.0 project in Visual Studio 2010 and it does not compile.

Do you now if this feature is really implemented and what I am doing wrong?

+4  A: 

I believe you are only missing your 'End Function' line. Try this:

 Dim test2 = (Function(t1 As T, t2 As T)
 Dim val1 As IComparable = DirectCast(prop.GetValue(t1), IComparable)
 Dim val2 As IComparable = DirectCast(prop.GetValue(t2), IComparable)
 Return val1.CompareTo(val2)
 End Function)
diceguyd30
Oh, thank you! Sorry for the silly question, probably is too hot today in the office :D.
marco.ragogna
Haha! Not silly at all! I ran into the exact same problem not one week ago.
diceguyd30
+2  A: 

You are missing End Function and you are trying to enclose the function body in parenthesis, which is wrong. This should work:

Dim test2 = Function(t1 As T, t2 As T)
    Dim val1 As IComparable = DirectCast(prop.GetValue(t1), IComparable)
    Dim val2 As IComparable = DirectCast(prop.GetValue(t2), IComparable)
    Return val1.CompareTo(val2)
End Function

If it doesn't compile, it would be helpful to know the error message you get.

Heinzi