我有一个名为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();
我收到一条错误消息:无法找到类型或命名空间名称“type”(您是否缺少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);
答案 0 :(得分:1)
typeof(modelName.GetType())永远不会起作用,因为modelName.GetType()返回一个System.String的运行时类型。
modelName.GetType有同样的问题。
typeof(modelName)将不起作用,因为modelName是一个字符串,而typeof需要一个Type。
所以....如果你有一个字符串“VideoGame”,你想获得TypeGame上的方法......
我愿意:
Type.GetType(modelName).GetMethods()
Type.GetType将按指定的名称返回Type。请注意,这需要一个程序集限定名称....所以仅提供VideoGame是不够的。您需要modelName采用以下形式:
MyNamespace.VideoGame, MyAssemblyThatContainsVideoGame
此外,这意味着无论运行什么T4代码都需要引用MyAssemblyThatContainsVideoGame。
答案 1 :(得分:0)
如果您想将名称作为字符串传递,请使用Activator.CreateInstance