在运行时vb.net动态转换

时间:2012-09-13 16:54:49

标签: vb.net casting dynamictype

我想知道这是否正常,假设我的项目中有一个类,在某些时候我需要将一个对象强制转换为这个类或另一个类,但我只能在运行时知道这个,所以在设计时我可以做这样的事吗??

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) 

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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。