posts - 930,  comments - 588,  views - 402万
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

          有的时候,我们需要定义一些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)实现简单实体代码生成

Linq to Entity 的T4 模板生成代码


作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog

posted on   PetterLiu  阅读(1644)  评论(0编辑  收藏  举报
编辑推荐:
· [.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做测试项目
点击右上角即可分享
微信分享提示