c# - 给定一个表示类型的字符串,我需要知道它是值类型还是引用类型

标签 c# types t4

我正在编写一个 T4 模板,但遇到了困难。如果模板的消费者写:

Please generate stuff for: string myString

我需要生成

if (myString != null)
{
    DoStuffWith(myString)
}

而如果他们写

Please generate stuff for: int myInt

我需要简单地生成

DoStuffWith(myInt)

这也需要与自定义值/引用类型一起使用。

如果我强制模板使用者编写 System.String myStringSystem.Int32 myInt,我想这可以毫不费力地完成;大概有一些 GetTypeFromFullTypeName 方法隐藏在框架的某处。但我不想让他们那样做。

关于我的 T4 模板如何获取此信息以便我可以有条件地生成正确代码的任何想法?

最佳答案

  1. 获取Type对应的实例类(即 Type.GetTypeAssembly.GetType )。

  2. 检查 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/

相关文章:

t4 - C++ 转换 T4 模板忽略输出文件

c# - 如何在T4模板中输出<Type>

visual-studio-2010 - 如何从 PowerShell 脚本触发 T4 模板

javascript - 修复 Typescript 中的类型

c# - 即使一组为空,获取笛卡尔积的 LINQ 查询是什么?

c# - 将字节数组从 PHP 发送到 WCF

c# - 在 Mvc 3 razor View 中,基于模型中的空值有条件地呈现 html 的最佳方法是什么

c# - 从 url 下载图像并不总是保存整个图像 (Winrt)

C# 我应该在这里投什么类型?

python - 类型提示 : Is it a bad practice to alias primitive data types?