An anonymous type is an object data type that is built automatically by Visual Basic and never given a name for the program to use. The type is used implicitly by the code that needs it and is then discarded.
The following code uses LINQ to select data from an array of BookInfo objects named BookInfos. It begins by using a LINQ query to fill variable book_query with the selected books. It iterates through the results stored in book_query, adding information about the selected books to a string, and displays the result in a text box.
Dim book_query =
From book As BookInfo In BookInfos
Where book.Year > 1999
Select book.Title, book.Pages, book.Year
Order By Year
Dim txt As String = ""
For Each book_data In book_query
txt &= book_data.Title & " (" & book_data.Year & ", " &
book_data.Pages & " pages)" & vbCrLf
Next book_data
txtResult.Text = txt
The book_query variable is an ordered sequence containing objects that hold the data selected by the query: Title, Pages, and Year. This type of object doesn’t have an explicit definition; it is an anonymous type created by Visual Basic to hold the selected values Title, Pages, and Year. If you hover the mouse over the book_query variable in the code editor, a tooltip appears giving the variable’s data type as:
System.Linq.IOrderedEnumerable(Of <anonymous type>)
Later, the code uses a For Each loop to enumerate the objects in book_query. The looping variable book_data must have the same type as the items in the sequence. The code does not explicitly give the variable’s data type, so Visual Basic can infer it. If you hover the mouse over the book_data variable in the code editor, a tooltip appears giving the variable’s data type as:
<anonymous type>
You are not really intended to use anonymous types explicitly. For example, you shouldn’t need to declare a new object of the anonymous type. They are intended to support LINQ. Although you won’t use anonymous types explicitly, it’s still helpful to understand what they are.
For more information on LINQ, see Chapter 20.