有的时候,我们需要定义一些Enum类型,一种比较灵活的做法是用T4模板去读取指定的XML,然后根据NODE生成我们想到的Enum类型。首先看,我们有这样一个XML文件:
1: <?xml version="1.0" encoding="utf-8" ?>
2: <Root>
3: <Element Name="Red"/>
4: <Element Name="Blue" />
5: </Root>
然后我们编写扩展名为TT的模板文件在VisualStudio中:
1: <#@ template language="C#" hostspecific="True"#>
2: <#@ assembly name="System.Core" #>
3: <#@ assembly name="System.Xml" #>
4: <#@ import namespace="System.Xml" #>
5: <#@ import namespace="System.Collections.Generic" #>
6: <#@ import namespace="System.IO" #>
7: using System;
8:
9: namespace Examples
10: {
11: public class ExampleClass
12: {
13: #region Enums
14:
15: public enum MyExampleEnum
16: {
17: <#
18: foreach (string name in this.GetNames())
19: {
20: #>
21: <#= name #>,
22: <#
23: }
24: #>
25: }
26:
27: #endregion
28: }
29: }
30: <#+
31: public List<string> GetNames()
32: {
33: List<string> result = new List<string>();
34: XmlDocument doc = new XmlDocument();
35: string absolutePath = Host.ResolvePath("MyEnum.xml");
36: doc.Load(absolutePath);
37: foreach (XmlNode node in doc.SelectNodes("/Root/Element"))
38: {
39: result.Add(node.Attributes["Name"].InnerText);
40: }
41: return result;
42: }
43: #>
最后执行这个模板文件,将会在当前目录下,生成如下的CODE文件:
1: using System;
2:
3: namespace Examples
4: {
5: public class ExampleClass
6: {
7: #region Enums
8:
9: public enum MyExampleEnum
10: {
11: Red,
12: Blue,
13: }
14:
15: #endregion
16: }
17: }
是不是很简单,当然你可以编写更加复杂的模板文件,生成你想到CODE。
如果你不了解T4模板,你可以参考MSDN, 如你已经了解,那么你有可能对以下文章感兴趣:
T4 (Text Template Transformation Toolkit)实现简单实体代码生成
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。
分类:
T4
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
2009-06-02 Asp.net MVC RTM1.0使用NUnit做测试项目