<#@テンプレート言語= " C#の"#> <#出力拡張= @ " は.cs "#> <#@アセンブリ名= " System.Core "#> <#インポート@ 名前空間 = " System.Linqの"#> < #1 タイプ[] types_to_generate = 新しい[] { typeof演算(オブジェクト)、 typeof演算(BOOL)、 typeof演算(バイト)、 typeof演算(CHAR)、 typeof演算(小数)、typeof演算(ダブル)、 typeof演算(フロート)、 typeof演算(int型)、 typeof演算(ロング)、 typeof演算(sbyte)、 typeof演算(短い)、 typeof演算(文字列)、 typeof演算(UINT)、 typeof演算(ULONG)、 typeof演算(USHORT ) }。 # > 使用してシステムを。 パブリック 静的 クラスGreaterTest { < #1 のforeach(VARのタイプでtypes_to_generate) { # > パブリック 静的の<#= type.Name#>(<#= type.Name#>左、<#= type.Name#> 右) { < #の タイプIComparableを = (から INTF で type.GetInterfaces()ここで、 typeof演算(IComparableを<> ) .MakeGenericType(タイプ).IsAssignableFrom(INTF) || typeof演算(IComparableを).IsAssignableFrom(INTF) 選択)().FirstOrDefaultをINTF。 もし(IComparableを!= nullの) { # > 戻る left.CompareTo(右)< 0を?右左; < # } 他 { # > スロー 新しいApplicationExceptionをする( " タイプ<#= type.Name#>のいずれか実装しなければならない" + " IComparableを又はIComparableを<<#= type.Name#>>インターフェイスを。" )。 < # } # > } < #> }
生成されたコード:
使用してシステムを。 パブリック 静的 クラスGreaterTest { 公共 静的のオブジェクト(左のオブジェクトは、権利オブジェクト) { スロー 新しい(ApplicationExceptionをを " タイプオブジェクトのいずれかを実装しなければならない" + " IComparableを又はIComparableを<OBJECT>インターフェイスを。" )。 } パブリック 静的のブール(論理左は、ブール右) { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的(左バイト右バイト)のバイト { リターン left.CompareTo(右)< 0?右左; } パブリック 静的のチャー(charは左、チャー右) { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的(小数点左、小数右)の10進 { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的(ダブル左、ダブル右)のダブル { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的(シングル左、シングル右)のシングル { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的ののInt32(のInt32は左、右のInt32は) { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的のInt64の(Int64の左、Int64の右) { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的のSByte(左SByte、SByte右) { 戻り left.CompareTo(右)< 0を?右左; } パブリック 静的のInt16型(Int16型は左、Int16型は右) { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的の文字列(文字列、右列を左) { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的のUInt32型(UInt32型は、左は、UInt32型は、右) { 戻り left.CompareTo(右)< 0?右左; } パブリック 静的のUInt64型(UInt64型は、左、右UInt64型) { 返す left.CompareTo(右)<0?右左; } パブリック 静的のUInt16型(UInt16型は、左は、UInt16型は、右) { 戻り left.CompareTo(右)< 0?右左; } }
ます。https://www.cnblogs.com/davidgu/p/3998591.htmlで再現