سؤال

In Visual Basic.net, can I create an Object, or a List of T with the type from another object.

Here is some code:

Dim TestObjectType As Author
Dim TestObject As TestObjectType.GetType

I am getting an error:

TestObjectType.GetType is not defined

EDIT

Can I create a Type object of a certain type, and then create objects, lists or cast objects to this type from this Type object?

هل كانت مفيدة؟

المحلول

Dim TestObject As TestObjectType.GetType will look for a type named GetType in the namespace TestObjectType.


To create an instance of a class using System.Type, you can use Activator.CreateInstance:

Dim TestObject = Activator.CreateInstance(TestObjectType.GetType())

To create a generic list, you can use Type.MakeGenericType:

Dim listType = GetType(List(Of )).MakeGenericType(TestObjectType.GetType())
Dim list = Activator.CreateInstance(listType)

Note that both snippets above return an Object; however, you can make use of generics to achieve compile time safety:

Dim TestObject = CreateNew(TestObjectType)
Dim AuthorList = CreateNewList(TestObjectType)

...

Function CreateNew(Of T As New)(obj As T) As T 
    Return New T()
End Function

Function CreateNewList(Of T)(obj As T) As List(Of T)
    Return New List(Of T)
End Function
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top