[ACCEPTED]-Creating a list of Anonymous Type in VB-anonymous-types
Here's a handy method for creating a list 8 of an anonymous type from a single anonymous 7 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 6 wanted a way to create the list before creating 5 an element.
There are 2 ways to do this. You 4 can use the following code to create an 3 empty list. It borders on hacky because 2 you are passing parameters you don't ever 1 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 })
Here is how to do it inline using casting 5 by example (without creating a second function):
Sub Main()
Dim x = New With {.Name = "Bob", .Number = 8675309}
Dim xList = {x}.ToList()
End Sub
(based 4 on c# version posted here )
Essentially you create 3 the anonymous type, put it in an array ( {x} ) then 2 use the array's .ToList() method to get 1 a list.
How about a single line construct like this?
Dim yourList = {(New With {.Name="", .Age=0})}.Take(0).ToList
0
Since the type is anonymous, you must use 4 generic and type-inference.
The best way 3 is to introduce a generic function that 2 creates an empty collection from a prototype 1 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
I like Jared's solution but just to show 5 the direct equivalent of Jon's code (notwithstanding 4 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 3 it's not extensible … but may be used to 2 seed other LINQ magic for creating larger 1 lists.
In a single line you can add anonymous types 1 into a list
Dim aList = {(New With {.Name="John", .Age=30}), (New With {.Name="Julie", .Age=32})}.ToList
If you're adding values to the list by iteration, I 2 assume you have an IEnumerable
to start with? Just 1 use .Select
with .ToList
. That's what it's designed for.
Dim l = dsResources.Select(Function(d) New With {
.Name = d.Last_Name & ", " & d.First_Name
}).ToList()
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.