Creating a list of Anonymous Type in VB
Solution 1
Here's a handy method for creating a list of an anonymous type from a single anonymous type.
Public Function CreateListFromSingle(Of T)(ByVal p1 As T) As List(Of T)
Dim list As New List(Of T)
list.Add(p1)
return List
End Function
Now you can just do the following
Dim list = CreateListFromSingle(dsResource)
EDIT OP wanted a way to create the list before creating an element.
There are 2 ways to do this. You can use the following code to create an empty list. It borders on hacky because you are passing parameters you don't ever intend to use but it works.
Public Function CreateEmptyList(Of T)(ByVal unused As T) As List(Of T)
Return New List(Of T)()
End Function
Dim x = CreateEmptyList(New With { .Name = String.Empty, .ID = 42 })
Solution 2
Here is how to do it inline using casting by example (without creating a second function):
Sub Main()
Dim x = New With {.Name = "Bob", .Number = 8675309}
Dim xList = {x}.ToList()
End Sub
(based on c# version posted here )
Essentially you create the anonymous type, put it in an array ( {x} ) then use the array's .ToList() method to get a list.
Solution 3
How about a single line construct like this?
Dim yourList = {(New With {.Name="", .Age=0})}.Take(0).ToList
Solution 4
Since the type is anonymous, you must use generic and type-inference.
The best way is to introduce a generic function that creates an empty collection from a prototype object.
Module Module1
Sub Main()
Dim dsResource = New With {.Name = "Foo"}
Dim List = dsResource.CreateTypedList
End Sub
<System.Runtime.CompilerServices.Extension()> _
Function CreateTypedList(Of T)(ByVal Prototype As T) As List(Of T)
Return New List(Of T)()
End Function
End Module
Solution 5
I like Jared's solution but just to show the direct equivalent of Jon's code (notwithstanding my comment there):
Public Function EnumerateFromSingle(Of T)(ByVal p1 As T) As IEnumerable(Of T)
Return New T() { p1 }
End Function
Not very useful by itself, since it's not extensible … but may be used to seed other LINQ magic for creating larger lists.
Daniel
2008 BSCS from a U.S. engineering school 2008 - 2015: Fortune 500 software engineer 2016 - 2017: Healthcare sector software developer 2017 - Present: Medical student and research fellow at a US MD school
Updated on July 09, 2022Comments
-
Daniel almost 2 years
I'd like to create a list of an anonymous type, for example:
Dim lineItem = New With {.Name = myFile(index).Last_Name & ", " & myFile(index).First_Name, _ .StartDate = myFile(index).Day, .EndDate = myFile(index).Day}
I have created that anonymous type. Now I'd like to add it to a list of that type. How do I declare a list of that type?