標籤:style blog color io ar for sp div on
<#@ 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)