我正在编写一个 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 模板如何获取此信息以便我可以有条件地生成正确代码的任何想法?
最佳答案
获取
Type
对应的实例类(即Type.GetType
或Assembly.GetType
)。检查
IsValueType
属性(property)。
具有“短名称”的类型数量非常有限,它们实际上是 C# 关键字。所以你可以使用一个案例陈述,例如case "string": return typeof (string);
您还需要一些规则 ?
,以及寻找泛型类的特定具体版本(递归会有所帮助)。不要尝试翻译 int?
进入System.Nullable``1[System.Int32]
,而是使用 typeof(System.Nullable<>).MakeGenericType(FindType("int"))
.
关于c# - 给定一个表示类型的字符串,我需要知道它是值类型还是引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7563500/