Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Visual Basic
  4. Create a list of Unknown type at compile time

Create a list of Unknown type at compile time

Scheduled Pinned Locked Moved Visual Basic
csharpdebuggingregexquestion
12 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Sascha Lefevre

    That looks like it should work in C#. What problem do you have with the VB-translation?

    If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

    D Offline
    D Offline
    dilkonika
    wrote on last edited by
    #3

    I don't know c# , so I have used a code translator. this is the code :

    Dim customList As Type = GetType(List(Of )).MakeGenericType(tempType)
    Dim objectList As IList = CType(Activator.CreateInstance(customList), IList)

    ' Copy items from a PropertyInfo list to the object just created
    Dim o As Object = objectThatContainsListToCopyFrom
    Dim p As PropertyInfo = o.[GetType]().GetProperty("PropertyName")
    Dim copyFrom As IEnumerable = p.GetValue(o, Nothing)
    For Each item As Object In copyFrom
    objectList.Add(item)
    Next
    ' Will throw exceptions if the types don't match.
    ' Iterate and access the items of "objectList"
    ' (objectList declared above as non-generic IEnumerable)
    For Each item As Object In objectList
    Debug.WriteLine(item.ToString())
    Next

    It shows several errors , but the first is on second line :

    Error 103 Too few type arguments to 'System.Collections.Generic.IList(Of T)'

    S 1 Reply Last reply
    0
    • D dilkonika

      I don't know c# , so I have used a code translator. this is the code :

      Dim customList As Type = GetType(List(Of )).MakeGenericType(tempType)
      Dim objectList As IList = CType(Activator.CreateInstance(customList), IList)

      ' Copy items from a PropertyInfo list to the object just created
      Dim o As Object = objectThatContainsListToCopyFrom
      Dim p As PropertyInfo = o.[GetType]().GetProperty("PropertyName")
      Dim copyFrom As IEnumerable = p.GetValue(o, Nothing)
      For Each item As Object In copyFrom
      objectList.Add(item)
      Next
      ' Will throw exceptions if the types don't match.
      ' Iterate and access the items of "objectList"
      ' (objectList declared above as non-generic IEnumerable)
      For Each item As Object In objectList
      Debug.WriteLine(item.ToString())
      Next

      It shows several errors , but the first is on second line :

      Error 103 Too few type arguments to 'System.Collections.Generic.IList(Of T)'

      S Offline
      S Offline
      Sascha Lefevre
      wrote on last edited by
      #4

      This works for me:

      Option Explicit On
      Option Strict On

      Imports System.Reflection

      Module Module1

      Public Class ChildClass
      End Class
      
      Public Class SomeClass
          Public Property Children As ICollection(Of ChildClass) = New HashSet(Of ChildClass)
      End Class
      
      Sub Main()
          Dim tempType = GetType(ChildClass)
          Dim someClass = New SomeClass
          someClass.Children.Add(New ChildClass)
      
          Dim customList As Type = GetType(List(Of )).MakeGenericType(tempType)
          Dim objectList As IList = CType(Activator.CreateInstance(customList), IList)
      
          ' Copy items from a PropertyInfo list to the object just created
          Dim o As Object = someClass
          Dim p As PropertyInfo = o.\[GetType\]().GetProperty("Children")
          Dim copyFrom As IEnumerable = CType(p.GetValue(o, Nothing), IEnumerable)
          For Each item As Object In copyFrom
              objectList.Add(item)
          Next
          ' Will throw exceptions if the types don't match.
          ' Iterate and access the items of "objectList"
          ' (objectList declared above as non-generic IEnumerable)
          For Each item As Object In objectList
              Debug.WriteLine(item.ToString())
          Next
      End Sub
      

      End Module

      If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

      D 1 Reply Last reply
      0
      • S Sascha Lefevre

        This works for me:

        Option Explicit On
        Option Strict On

        Imports System.Reflection

        Module Module1

        Public Class ChildClass
        End Class
        
        Public Class SomeClass
            Public Property Children As ICollection(Of ChildClass) = New HashSet(Of ChildClass)
        End Class
        
        Sub Main()
            Dim tempType = GetType(ChildClass)
            Dim someClass = New SomeClass
            someClass.Children.Add(New ChildClass)
        
            Dim customList As Type = GetType(List(Of )).MakeGenericType(tempType)
            Dim objectList As IList = CType(Activator.CreateInstance(customList), IList)
        
            ' Copy items from a PropertyInfo list to the object just created
            Dim o As Object = someClass
            Dim p As PropertyInfo = o.\[GetType\]().GetProperty("Children")
            Dim copyFrom As IEnumerable = CType(p.GetValue(o, Nothing), IEnumerable)
            For Each item As Object In copyFrom
                objectList.Add(item)
            Next
            ' Will throw exceptions if the types don't match.
            ' Iterate and access the items of "objectList"
            ' (objectList declared above as non-generic IEnumerable)
            For Each item As Object In objectList
                Debug.WriteLine(item.ToString())
            Next
        End Sub
        

        End Module

        If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

        D Offline
        D Offline
        dilkonika
        wrote on last edited by
        #5

        sorry , but the Ilist type is unknown . Everytime I get an error that :

        Error 103 Too few type arguments to 'System.Collections.Generic.IList(Of T)'

        I don't know why ?

        S 1 Reply Last reply
        0
        • D dilkonika

          sorry , but the Ilist type is unknown . Everytime I get an error that :

          Error 103 Too few type arguments to 'System.Collections.Generic.IList(Of T)'

          I don't know why ?

          S Offline
          S Offline
          Sascha Lefevre
          wrote on last edited by
          #6

          Do you get this error also when running my code on its own in a new console-project?

          If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

          D 2 Replies Last reply
          0
          • S Sascha Lefevre

            Do you get this error also when running my code on its own in a new console-project?

            If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

            D Offline
            D Offline
            dilkonika
            wrote on last edited by
            #7

            Yes , Ilist and Ienumerable are unknown and produce a similar error message that I have posted before.

            S 1 Reply Last reply
            0
            • D dilkonika

              Yes , Ilist and Ienumerable are unknown and produce a similar error message that I have posted before.

              S Offline
              S Offline
              Sascha Lefevre
              wrote on last edited by
              #8

              I wouldn't know why it should be neccessary for you, as it works for me without, but try it with these imports:

              Imports System.Collections
              Imports System.Collections.Generic

              If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

              1 Reply Last reply
              0
              • S Sascha Lefevre

                Do you get this error also when running my code on its own in a new console-project?

                If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

                D Offline
                D Offline
                dilkonika
                wrote on last edited by
                #9

                I add :

                Imports System.Collections

                and now the errors are resolved. But I have some problems in runtime 1. I want first to initialize an empty list. Because if I have just the :

                dim itemlist as Ilist

                ( Before calling these 2 lines

                Dim customList As Type = GetType(List(Of )).MakeGenericType(GetType(MyClass))
                itemlist = CType(Activator.CreateInstance(customList), IList)

                How can I check if the list is empty or ?? something similar. But I want a general checkin mode , because the same expression must be correct even when I clear the list and I want to check if empty ( before initializing for a new type ). ( I try to use

                If itemlist.Count > 0 Then

                but doesn't work.

                S 1 Reply Last reply
                0
                • D dilkonika

                  I add :

                  Imports System.Collections

                  and now the errors are resolved. But I have some problems in runtime 1. I want first to initialize an empty list. Because if I have just the :

                  dim itemlist as Ilist

                  ( Before calling these 2 lines

                  Dim customList As Type = GetType(List(Of )).MakeGenericType(GetType(MyClass))
                  itemlist = CType(Activator.CreateInstance(customList), IList)

                  How can I check if the list is empty or ?? something similar. But I want a general checkin mode , because the same expression must be correct even when I clear the list and I want to check if empty ( before initializing for a new type ). ( I try to use

                  If itemlist.Count > 0 Then

                  but doesn't work.

                  S Offline
                  S Offline
                  Sascha Lefevre
                  wrote on last edited by
                  #10

                  I have a hard time understanding that - can you explain it a bit more detailed?

                  If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

                  D 1 Reply Last reply
                  0
                  • S Sascha Lefevre

                    I have a hard time understanding that - can you explain it a bit more detailed?

                    If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

                    D Offline
                    D Offline
                    dilkonika
                    wrote on last edited by
                    #11

                    ok. I need a way to detect that this list is empty. But the expression that should do this , must include 2 cases : - The list is not yet created . ( So it's just declared as mylist as Ilist). - The list is created ( with your code ) but the items are deleted ( or has no items ). I try with the code : If mylist.Count..... but this doesn't work.

                    S 1 Reply Last reply
                    0
                    • D dilkonika

                      ok. I need a way to detect that this list is empty. But the expression that should do this , must include 2 cases : - The list is not yet created . ( So it's just declared as mylist as Ilist). - The list is created ( with your code ) but the items are deleted ( or has no items ). I try with the code : If mylist.Count..... but this doesn't work.

                      S Offline
                      S Offline
                      Sascha Lefevre
                      wrote on last edited by
                      #12

                      If mylist IsNot Nothing AndAlso mylist.Count > 0 Then
                      End If

                      ?

                      If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups