Capture Variables with Closures: VB.NET: Create Anonymous Types: Listing 2
Anonymous types can be created from LINQ statements or explicitly through code. The type is known only in the scope of the local variable and can be passed only between methods as objects. Within the same assembly you can reconstitute the value in the
original anonymous type, although it requires some tricks with generics and creates tightly coupled code.
Private Sub Test()
Dim customers = Customer.GetNewCustomerList()
Dim q = From cust In customers _
Select cust.FirstName, cust.LastName
DoSomething(q.ToArray())
End Sub
Private Sub DoSomething(ByVal items As Object())
Dim dummy = New With _
{.FirstName = "", .LastName = ""}
For Each item In items
Dim cust = Convert(dummy, item)
If cust IsNot Nothing Then
Console.WriteLine( _
cust.LastName & ", " _
& cust.FirstName)
End If
Next
End Sub
Private Function Convert(Of T As Class) _
(ByVal dummy As T, ByVal item As Object) _
As T
Return TryCast(item, T)
End Function