有的时候,我们需要定义一些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。
浙公网安备 33010602011771号