何か重要なものが欠けているのではないかと思いますが、動的メソッドを使用して IL で条件文を作成する方法がわかりません。以前は軽く手を出しただけでしたが、コードを拡張する必要があります。
私が見つけていないドキュメント (CLI ドキュメント以外) はありますか、または誰かがサンプル コードを持っていますか? それは素晴らしいことです。
乾杯、
正確なコードに応じて、さまざまな分岐命令があなたの味方になります。
ここは
if(memory[pointer] > 0) goto IL_0002;
イリノイ州:
IL_001f: ldsfld uint8[] BFHelloWorldCSharp.Program::memory
IL_0024: ldsfld int16 BFHelloWorldCSharp.Program::pointer
IL_0029: ldelem.u1
IL_002a: ldc.i4.0
IL_002b: bgt IL_0002
基本的に、比較したい値をスタックにプッシュしてから、bgtを呼び出して必要な場所にジャンプします。
brtrue/brfalse や beq などの IL コマンドの概要については、OpCodesクラスを確認してください。
また、C# で if コマンドを記述してコンパイルし、ILDASM または Reflector を使用して生成された IL を確認することもお勧めします。
方法は次のとおりです。
ラベルを定義します。例:
var skipProperty = il.DefineLabel();
あなたの状態を呼び出します:
il.Emit(OpCodes.Brtrue, skipProperty);
スキップしたい場所(たとえば、ifの終わり):
il.MarkLabel(skipProperty);
したがって、ラベルを作成します(参照が存在するように最初に作成する必要があります。後で「マーク」を呼び出して、必要なコードの実際の場所にラベルを配置します)。OpCodes.Brtrueは、リンクテキストの記事にリストされている多くの条件付き操作の1つにすぎません(Michaelに感謝します)