繁体   English   中英

从类型变量转换为类型

[英]Cast to type from Type variable

我使用Unity。 我有一个

abstract class A {}
class A1 : A {object someField;}
class A2 : A {object someField;}

我有一个CustomEditor,可在其中创建具有反射的A1 / A2实例(我需要具有添加从A派生的新类的能力),但是有一个问题:如果我像这样使用Activator

Type chosenType = ChooseType(); //ChosenType can be A1 or A2
A newObj = (A)Activator.CreateInstance(chosenType)

Unity不会序列化那些对象(因为它将对象序列化为(A)而不是(A1)或(A2)),我想像

(chosenType)MyObj

我看到的动态进行类型转换的最好方法是创建一个通用的

public static class ReflectionHelper{

    public T CastTo<T>(object obj)
    {
        return (T) obj;
    }
}

然后在运行时,创建一个通用方法以强制转换为我的特定类型。

var value = Activator.CreateInstance(ChosenType());
typeof(ReflectionHelper)
.GetMethod("CastTo")
.MakeGenericMethod(new []{value.GetType()})
.Invoke(null, value);

在调用中,我们将null称为是因为它是一个静态方法,如果它是一个实例方法,则需要一个类型为Reflection Helper的对象的实例。

但是,我想警告您,做这些事情往往会散发出代码的味道,我敦促您仅将反射作为最后的选择,而不是将其作为第一个尝试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM