我有一个名为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/

10-10 08:00