簡體   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