質問

私はいくつかの特別の方法、解析で求めます。

例:

public static class SrcHelper {
    [MySpecialMethod]
    [Conditional( "DEBUG" )]
    public static void ToDo( params object[] info ) {
        /* do nothing */
        /* this method is not called when code is compiled in RELEASE mode */
    }
}
// ... somewhere else in another assembly ...
Array CreateArraySampleMethod( int size ) {
    // This call has only informative character. No functionality is required.
    SrcHelper.ToDo( "Should create array of ", typeof( MyClass ), " with specified size." );
    throw new NotImplementedException();
}

ここからコンパイルされたコードしたいの引数値{"を配列"のMyClass"を指定します。" }.また利用Cecilからのルーツはインドネシアでも、この指示通話"ToDoの方法である。今、私混同を識別する方法について指示数値です。

いきな複雑な状況では、引数の値は解消されることがあります。思いつの解決にのみ定数値であった。

感謝。

編集: の"ToDo"の方法と同様のもの)を使用する必要がありますの代替オルターナティブとしてのコメント(//,/*...*/後編纂、IL分析-autogeneratedュtodoリストコンクリートます。

役に立ちましたか?

解決

のコード生成が少し混乱ができます簡単な例:

の作成:

public static void Main(string[] args)
{
    Console.WriteLine("", // ignore this argument
       "Should create array of ", typeof(int), " with specified size." "x");
}

を追加し、"x"は力のなかで活用することができ、params過負荷)

.method public hidebysig static void Main(string[] args) cil managed
{
    .custom instance void [mscorlib]System.STAThreadAttribute::.ctor()
    .maxstack 4
    .locals init (
        [0] object[] objArray)
    L_0000: ldstr ""
    L_0005: ldc.i4.4 
    L_0006: newarr object
    L_000b: stloc.0 
    L_000c: ldloc.0 
    L_000d: ldc.i4.0 
    L_000e: ldstr "Should create array of "
    L_0013: stelem.ref 
    L_0014: ldloc.0 
    L_0015: ldc.i4.1 
    L_0016: ldtoken int32
    L_001b: call class [mscorlib]System.Type 
                [mscorlib]System.Type::GetTypeFromHandle(
                    valuetype [mscorlib]System.RuntimeTypeHandle)
    L_0020: stelem.ref 
    L_0021: ldloc.0 
    L_0022: ldc.i4.2 
    L_0023: ldstr " with specified size."
    L_0028: stelem.ref 
    L_0029: ldloc.0 
    L_002a: ldc.i4.3 
    L_002b: ldstr "x"
    L_0030: stelem.ref 
    L_0031: ldloc.0 
    L_0032: call void [mscorlib]System.Console::WriteLine(string, object[])
    L_0037: ret 
}

ない構文解析のilを検出する引数で押し込まれ、コンパイラ生成し配列の型になります。a heristicることが脆弱なものが十分では次のようにコメントしている。

  1. findコマました。
  2. 探最寄り前newarrオブジェクト
  3. すべてのldstrとldtokenこともに、引数になります。

これは荒れも十分にお任せください。

は、AOPスタイルアプローチまたいもので ランタイム るだけでinstrumenting呼び出しのたびにダンプの値がsompile時間のごみのリアルオプションだけに与えられる。

このコード生成されることが推定される異なるリリースを構築することができますスポットの自動生成し配列詩人に明示的に作成でなければならないから離れた場所にあ電話サイトも異なる方法/コンストラクタ/クラスです。

"なお書き"

なお後の編集のためのなぜいこの属性に基づくアノテーションは、よりもはるかに優れており、解決できないかと思ったこの方法で属性で...

他のヒント

お使いいただくことによっております。しかし、通知る機能のみを取得す 一つ 引数:配列。そのまILます。 内部 の機能を歩くことができる配列を取得し、その価値:

public static void ToDo( params object[] info ) {
    foreach (object x in info)
        Console.WriteLine(x);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top