2011-09-26 208 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