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
comments powered by Disqus

Featured

Subscribe on YouTube