我正在写一个T4模板并且卡在这上面。如果模板的消费者写道:
Please generate stuff for: string myString
我需要生成
if (myString != null)
{
DoStuffWith(myString)
}
然而如果他们写了
Please generate stuff for: int myInt
我需要简单地生成
DoStuffWith(myInt)
这也需要使用自定义值/引用类型。
如果我强迫模板消费者写System.String myString
或System.Int32 myInt
,我想这可以毫无困难地完成;可能有一些隐藏在框架中的GetTypeFromFullTypeName
方法。但我不想让他们这样做。
关于我的T4模板如何获取此信息的任何想法,所以我可以有条件地生成正确的代码?
答案 0 :(得分:3)
获取Type
班级的相应实例(例如Type.GetType
或Assembly.GetType
)。
检查IsValueType
属性。
“短名称”类型的数量非常有限,它们实际上是C#关键字。所以你可以使用case语句,例如case "string": return typeof (string);
您还需要?
的一些规则,以及查找泛型类的特定具体版本(递归会很有帮助)。请勿尝试将int?
翻译为System.Nullable``1[System.Int32]
,而是使用typeof(System.Nullable<>).MakeGenericType(FindType("int"))
。
答案 1 :(得分:1)