C#のメタプログラミング - あなたのコードは、コードを生成してみましょう - テキストテンプレート変換の紹介...

<#@テンプレート言語= " 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
   のforeachVARのタイプ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で再現

おすすめ

転載: blog.csdn.net/weixin_34217773/article/details/93802959