c# – 从T4模板中的CodeProperty中检索属性类型

我正在使用T4实现一些相当直接的代码生成,但是当涉及到属性生成的细节时,我仍然遇到了一个基本问题.当我访问我想要生成的CodeProperty对象的Type属性时,它们返回’System .__ ComObject’而不是属性的实际类型.

我正在使用EnvDTE查找项目中包含我的自定义属性的所有类.我用它来标记某些代码生成类.到现在为止还挺好.然后我踩过我班级的所有CodeElement对象.我可以找到所有属性,只是我无法得到它们的“类型”.

这是我T4的片段:

public class <#= cls.Name #>_DTO
{
<#
    foreach (CodeElement child in cls.Children)
    {
        if (child.Kind == vscmelement.vscmelementProperty)
        {
            var prop = child as CodeProperty;
#>

    public <#= prop.Type.ToString() + " " + child.Name #> { get; set; }

<#
    }
  }
}
#>

输出的样本是:

public class TestResult_DTO
{
    public System.__ComObject TestType { get; set; }
}

正如您所看到的,我接近有效输出,它只是我正在努力访问的属性的类型.

解决方法

看看文档,我怀疑你想要Asstring而不是ToString().那会叫 CodeTypeRef.AsString

Asstring return a string representation for the CodeTypeRef in the language being modeled. For example,if the vsCMTypeRef type is vsCMTypeRefInt,then the string would be “Int” for Visual C# and “Long” for Visual Basic.

我自己从来没有写过这种代码,所以我只是按文档编写,但值得一试:)

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...