2011-09-26 164 views
2

我有一個叫做VideoGame的模型類。我需要這個類在這個方法中使用反射在t4模板中傳遞。用T4模板反射

MethodInfo[] methodInfos = 
    typeof(type).GetMethods(BindingFlags.Public | BindingFlags.Static); 

我有以下變量。

//passed via powershell file - is a string "VideoGame" 
var modelName = Model.modelName 
Type type = modelName.GetType(); 

我得到一個錯誤,指出:類型或命名空間名稱「類型」找不到(是否缺少using指令或程序集引用?)。我需要知道的是如何在該typeof()方法內傳遞VideoGame類。我曾嘗試以下:

MethodInfo[] methodInfos = 
    typeof(modelName.GetType()).GetMethods(BindingFlags.Public | BindingFlags.Static); 
MethodInfo[] methodInfos = 
    modelName.GetType.GetMethods(BindingFlags.Public | BindingFlags.Static); 
MethodInfo[] methodInfos = 
    typeof(modelName).GetMethods(BindingFlags.Public | BindingFlags.Static); 

回答

1

的typeof(modelName.GetType())永遠不會成功,因爲modelName.GetType()返回系統。字符串的運行時類型。

modelName.GetType具有相同的問題。

typeof(modelName)將不起作用,因爲modelName是一個字符串,typeof需要一個Type。

所以....如果你有一個字符串 「的VideoGame」,你想要得到的類型的VideoGame方法....

我會做:

Type.GetType(modelName).GetMethods() 

Type.GetType將按指定的名稱返回一個Type。請注意,這需要一個Assembly Qualified Name ....因此僅提供VideoGame是不夠的。你需要MODELNAME是形式:

MyNamespace.VideoGame, MyAssemblyThatContainsVideoGame 

此外,這意味着,無論是運行你的T4代碼需要有MyAssemblyThatContainsVideoGame參考。

+0

好吧,當我傳入程序集(與命名空間相同)時,我得到:Project.Games'是一個'命名空間',它在給定的上下文中無效 – tehdoommarine

+0

您能提供確切的代碼嗎?我會想象你有類似Type.GetType(string.Format(「{0},{1}」,modelName,modelName.Split('。')[0])) – Jeff

+0

等等...你試圖獲取代碼GENERATOR中的方法列表,而不是GENERATED CODE,對吧? – Jeff