[英]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.