首页 > 代码库 > C# Meta Programming - Let Your Code Generate Code - Introduction of The Text Template Transformation Toolkit(T4)
C# Meta Programming - Let Your Code Generate Code - Introduction of The Text Template Transformation Toolkit(T4)
<#@ template language="C#" #><#@ output extension=".cs" #><#@ assembly name="System.Core" #><#@ import namespace="System.Linq" #><# Type[] types_to_generate = new[] { typeof(object), typeof(bool), typeof(byte), typeof(char), typeof(decimal), typeof(double), typeof(float), typeof(int), typeof(long), typeof(sbyte), typeof(short), typeof(string), typeof(uint), typeof(ulong), typeof(ushort) };#>using System;public static class GreaterTest{<# foreach (var type in types_to_generate) {#> public static <#= type.Name #> of(<#= type.Name #> left, <#= type.Name #> right) {<# Type icomparable = (from intf in type.GetInterfaces() where typeof(IComparable<>) .MakeGenericType(type).IsAssignableFrom(intf) || typeof(IComparable).IsAssignableFrom(intf) select intf).FirstOrDefault(); if (icomparable != null) {#> return left.CompareTo(right) < 0 ? right : left;<# } else {#> throw new ApplicationException( "Type <#= type.Name #> must implement one of the " + "IComparable or IComparable<<#= type.Name #>> interfaces.");<# }#> }<# }#>}
生成的代码:
using System;public static class GreaterTest{ public static Object of(Object left, Object right) { throw new ApplicationException( "Type Object must implement one of the " + "IComparable or IComparable<Object> interfaces."); } public static Boolean of(Boolean left, Boolean right) { return left.CompareTo(right) < 0 ? right : left; } public static Byte of(Byte left, Byte right) { return left.CompareTo(right) < 0 ? right : left; } public static Char of(Char left, Char right) { return left.CompareTo(right) < 0 ? right : left; } public static Decimal of(Decimal left, Decimal right) { return left.CompareTo(right) < 0 ? right : left; } public static Double of(Double left, Double right) { return left.CompareTo(right) < 0 ? right : left; } public static Single of(Single left, Single right) { return left.CompareTo(right) < 0 ? right : left; } public static Int32 of(Int32 left, Int32 right) { return left.CompareTo(right) < 0 ? right : left; } public static Int64 of(Int64 left, Int64 right) { return left.CompareTo(right) < 0 ? right : left; } public static SByte of(SByte left, SByte right) { return left.CompareTo(right) < 0 ? right : left; } public static Int16 of(Int16 left, Int16 right) { return left.CompareTo(right) < 0 ? right : left; } public static String of(String left, String right) { return left.CompareTo(right) < 0 ? right : left; } public static UInt32 of(UInt32 left, UInt32 right) { return left.CompareTo(right) < 0 ? right : left; } public static UInt64 of(UInt64 left, UInt64 right) { return left.CompareTo(right) < 0 ? right : left; } public static UInt16 of(UInt16 left, UInt16 right) { return left.CompareTo(right) < 0 ? right : left; }}
C# Meta Programming - Let Your Code Generate Code - Introduction of The Text Template Transformation Toolkit(T4)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。