2012-09-13 89 views
3

我想知道如果这是好的,可以说我有一个类在我的项目的某个地方,在某些时候我需要将一个对象转换为此类类型或另一个,但我可以只有在运行时才知道,所以在设计时我可以做这样的事情吗?在运行时动态铸造vb.net

Dim obj = 'will be assigned something of some type. 
Dim typeObj As Type = Type.GetType("xxxx.Foo") 
Dim fooVar As Foo = CTypeDynamic(obj, typeObj) 

将这项工作作为让说:

Dim x As String = "3" 
Dim n As Integer = CType(x, Integer) 
+0

试试看并找出答案。 –

回答

1

您的意思是在运行时创建类的实例?

Dim obj As String = "AssemblyName.YourClassName" 
    Dim typeObj As Type = Type.GetType(obj) 
    Dim fooVar = Activator.CreateInstance(typeObj) 
0

我不知道VB有这样的关键字,在C#中我解决了这种方式:

private static T PrivDynamicCast<T>(object obj) 
{ 
    return (T)obj; 
} 


public static object DynamicCast(object obj, Type targetType) 
{ 
    var dynamicCastMethod = typeof(XType).GetMethod("PrivDynamicCast", BindingFlags.NonPublic | BindingFlags.Static); 
    var tipizedCasteMethod = dynamicCastMethod.MakeGenericMethod(targetType); 
    return tipizedCasteMethod.Invoke(null, new[] { obj }); 
} 

您可以轻松地将其转换为VB。