创建 T4 生成类型的泛型 List

2024-02-18

我使用 T4 技术创建了简单的类。

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
using System;

<# var properties = new String[]{"P1", "P2", "P3"}; #>
public class MyGeneratedClass {
<#  
    for(int i = 0; i < 3; i++)
    {
    #>
        private Int32 _<#= properties[i] #> = <#= i #>;
        public Int32 <#= properties[i] #> 
        {
            get 
            {
                return _<#= properties[i] #>;
            }
        } 
    <#
    }
    #>
}

然后我创建了一个像这样的生成类型的实例

static void Main(String[] args)
{
    var template = new Template1();
    var text = template.TransformText();

    CodeDomProvider codeProvider = new CSharpCodeProvider();
    ICodeCompiler compiler = codeProvider.CreateCompiler();

    // add compiler parameters
    var compilerParams = new CompilerParameters
    {
        CompilerOptions = "/target:library /optimize",
        GenerateExecutable = false,
        GenerateInMemory = true,
        IncludeDebugInformation = false
    };
    compilerParams.ReferencedAssemblies.Add("mscorlib.dll");
    compilerParams.ReferencedAssemblies.Add("System.dll");

    // compile the code
    var compilerResults = compiler.CompileAssemblyFromSource(compilerParams, text);

    if (compilerResults.Errors.HasErrors)
        throw new Exception();

    // Создаем экземпляр класса
    var instance = compilerResults.CompiledAssembly.CreateInstance("MyGeneratedClass");
    if (instance == null)
        return;

    var TYPE = instance.GetType();
    var list = new List<TYPE>(); 

}

var list = new List<TYPE>();生成编译时错误:

找不到类型或命名空间名称“TYPE”(是否缺少 using 指令或程序集引用?)

  1. 有没有办法创建具有以下类型的通用列表(或某些通用集合)MyGeneratedClass class?
  2. 有没有更简单的方法来创建实例MyGeneratedClass class?

Type genericListType = typeof(List<>);
Type[] typeArgs = new[] { instance.GetType() };
var generic = genericListType.MakeGenericType(typeArgs);
System.Collections.IList list = (System.Collections.IList)Activator.CreateInstance(generic);

foreach (dynamic item in list)
{
//whatever
}

希望我对你说得对..

编辑一些更有用的东西,

这种方法对于数组列表只是如果您尝试添加与特定运行时类型不同的内容,则运行时会出现异常。尽管数组列表在添加“错误”项目的情况下不会引发异常,相反,如果您使用这些项目,则会出现或不会出现异常。我确实(即使我在编译时不知道类型)尝试使用具体的泛型而不是开放的数组列表,因为异常是在正确的代码行引发的(恕我直言)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建 T4 生成类型的泛型 List 的相关文章

随机推荐

  • 使用 C# 控制台应用程序创建 HTTP POST 请求并接收响应

    我需要将数据发布到 URL https somesite com 以根据我发布的参数下载 responseStrem 中的文件 如何使用 C 控制台应用程序来做到这一点 参数 文件名 用户身份 密码 类型 using System usin
  • 流星,mongodb,空格键,如何只显示小数点后两位

    我有一个具有类似值的集合 pctFail 0 3515500159795462 当我将其传递给模板并显示为 myTemplate 时 它在我的 html 中显示为 0 3515500159795462 如何将其显示为 0 35 您可以使用模
  • C# 中的结构体数组

    我正在尝试使用结构数组从用户那里获取输入 然后打印它 using System using System Collections Generic using System Linq using System Text namespace C
  • 使用 JavaScript 计算速度返回 NaN

    我正在按照此处显示的示例进行操作如何在 Javascript 中检测互联网速度 https stackoverflow com questions 5529718 how to detect internet speed in javasc
  • 在 Bootstrap 中向 span div 添加边框会弄乱布局

    我从 Twitter Bootstrap 开始 有一个关于布局如何在其中发挥作用的问题 这是 HTML
  • Bootstrap .popover()“显示”和“销毁”无法正常工作

    当我在 手动 模式下使用引导弹出窗口时 销毁 和 隐藏 无法正常工作 当我使用隐藏和销毁时 弹出窗口不透明度更改为 0 但它没有将显示更改为无 这导致弹出窗口容器覆盖其下方的内容 否则 如果我使用 toogle 模式 它可以正常工作 My
  • 当我们实例化一个对象时,是否会创建超类的实例?

    当我们在java中实例化一个特定的类时 是否会创建超类的实例 如果是这种情况 那么实例化所有超类将会产生大量开销 我尝试了以下代码 public class AClass public AClass System out println C
  • 倾斜阴影,而不是内容

    考虑 div class my class AAA div 我只想倾斜阴影 但不倾斜内容div将阴影放入伪元素中 my class height 5rem width 10rem before content box shadow 0 2e
  • 从用户代理检测设备(移动设备)是什么的php脚本?

    我尝试编写一个 php 脚本 从标头中的用户代理返回设备 我看到的问题并不是简单地执行正则表达式 因为设备之间存在差异 我错了吗 所以我想要根据用户代理更新的移动设备列表 我找到了这个清单 手机用户代理列表 http en wikipedi
  • 避免跨线程操作错误的最简洁和正确的方法?

    我不太擅长代表 也不明白幕后发生的事情 我得到了cross thread operation从不同线程访问 UI 项目时出错 我想做的是在 a 中编写一个通用函数Utility类 以便我可以将任何方法 代码块传递给该函数 我可以通过多种方式
  • 具有不规则节点的分层 data.frame 到 JSON

    我有这个嵌套数据集 grandparent parent child grandchild age Grandma 100 Grandma John 72 Grandma John Jessica 41 Grandma John Joann
  • XmlSerializer 更改编码

    我正在使用这段代码Serialize XML to String XmlWriterSettings xmlWriterSettings new XmlWriterSettings indent true Encoding Encoding
  • emacs 创建键修饰符

    我在 mac 操作系统上使用 emacs 我想将修饰符 Meta Control 映射到一个简单的键 基本上这就是我需要的 global set key kbd a hyper 这里 a 只是 a 键 没有 Control a 或其他什么
  • 用C解析CSV文件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一个库可以用来解析 C 中的 CSV 文件 我在 Linux 系统上 我知道关于this http
  • 我需要为 NSObject 调用 [super init] 或 [super initWithCoder] 等

    通常当我从UIclass I 将调用感兴趣的超类初始值设定项 但是 我不确定实施细节NSObject 似乎在成员变量方面没有太多进展 所以我想知道 我需要打电话吗 super init 如果我的子类扩展NSObject 从技术上来说 不 这
  • 如何捕获 Python Unittest 测试用例失败的屏幕截图

    我使用 Python 3 6 5 和以下库 Appium Python 客户端 0 26 单元测试2 1 1 0 硒 3 5 0 pytest 3 6 3 现在我需要截图以防测试失败 所以我故意做了一个错误的陈述self driver fi
  • 无法理解使用 Eclipse 的 Maven pom 文件

    I am very new to Maven and i am creating my first maven project of maven archetype quickstart 然后它会生成错误消息 但在我的项目资源管理器中 我无
  • SICP中的图片语言如何使用框架?

    我似乎无法理解 SICP 中框架的实现 书中指出 我们将使用单位正方形中的坐标 0 图像如何表示为坐标 我能想到的唯一解释是 所有图像 都是线条 只能映射到一个框架 该框架的边界不能超过单位正方形的边界 但我对此表示怀疑 因为书中的下一行解
  • 如何在 Objective C 中打印出 bool

    我在 NSUserDefault 中为关键 TCshow 设置了一个 bool 值 我想运行 nslog 测试密钥是否已保存 并且我正在尝试打印布尔值 这是我的代码 但它不起作用 有什么建议吗 IBAction acceptAction i
  • 创建 T4 生成类型的泛型 List

    我使用 T4 技术创建了简单的类 lt template debug false hostspecific false language C gt lt output extension cs gt using System lt var