我有一个名为VideoGame
的模型类。我需要在该方法中使用反射在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);
最佳答案
typeof(modelName.GetType())将永远无法工作,因为modelName.GetType()返回System.String的运行时类型。
modelName.GetType有相同的问题。
typeof(modelName)不起作用,因为modelName是一个字符串,并且typeof需要类型。
所以...。如果您有字符串“ VideoGame”,并且想要获取类型为VideoGame的方法。
我会做:
Type.GetType(modelName).GetMethods()
Type.GetType将返回具有指定名称的Type。请注意,这需要一个程序集合格名称...。因此仅提供VideoGame是不够的。您需要modelName的形式为:
MyNamespace.VideoGame, MyAssemblyThatContainsVideoGame
此外,这意味着无论正在运行的T4代码是什么,都需要引用MyAssemblyThatContainsVideoGame。
关于c# - 用T4模板反射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7558809/