次の方法で共有


DebugView 構文

DebugView プロパティ (デバッグ時にのみ使用できます) は、式ツリーの文字列レンダリングを提供します。 ほとんどの構文は理解が非常に簡単です。特別なケースについては、次のセクションで説明します。

各例の後に、 DebugView を含むブロック コメントが続きます。

ParameterExpression

ParameterExpression 変数名は、先頭に $ 記号と共に表示されます。

パラメーターに名前がない場合は、自動的に生成された名前 ( $var1$var2など) が割り当てられます。

ParameterExpression numParam =  Expression.Parameter(typeof(int), "num");
/*
    $num
*/

ParameterExpression numParam =  Expression.Parameter(typeof(int));
/*
    $var1
*/

ConstantExpression

整数値、文字列、およびConstantExpressionを表すnullオブジェクトの場合、定数の値が表示されます。

標準のサフィックスを C# リテラルとして持つ数値型の場合、サフィックスが値に追加されます。 次の表に、さまざまな数値型に関連付けられているサフィックスを示します。

タイプ キーワード 敬称
System.UInt32 uint する ユー
System.Int64 長い L
System.UInt64 ulong UL規格
System.Double ダブル D
System.Single 浮く F
System.Decimal 小数 エム
int num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
    10
*/

double num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
    10D
*/

BlockExpression

BlockExpression オブジェクトの型がブロック内の最後の式の型と異なる場合、その型は山かっこ (<>) 内に表示されます。 それ以外の場合、 BlockExpression オブジェクトの型は表示されません。

BlockExpression block = Expression.Block(Expression.Constant("test"));
/*
    .Block() {
        "test"
    }
*/

BlockExpression block =  Expression.Block(typeof(Object), Expression.Constant("test"));
/*
    .Block<System.Object>() {
        "test"
    }
*/

LambdaExpression

LambdaExpression オブジェクトはデリゲート型と共に表示されます。

ラムダ式に名前がない場合は、自動的に生成された名前 ( #Lambda1#Lambda2など) が割り当てられます。

LambdaExpression lambda =  Expression.Lambda<Func<int>>(Expression.Constant(1));
/*
    .Lambda #Lambda1<System.Func'1[System.Int32]>() {
        1
    }
*/

LambdaExpression lambda =  Expression.Lambda<Func<int>>(Expression.Constant(1), "SampleLambda", null);
/*
    .Lambda #SampleLambda<System.Func'1[System.Int32]>() {
        1
    }
*/

LabelExpression

LabelExpression オブジェクトの既定値を指定した場合、この値はLabelTarget オブジェクトの前に表示されます。

.Label トークンは、ラベルの先頭を示します。 .LabelTarget トークンは、ジャンプ先のターゲットを示します。

ラベルに名前がない場合は、自動的に生成された名前 ( #Label1#Label2など) が割り当てられます。

LabelTarget target = Expression.Label(typeof(int), "SampleLabel");
BlockExpression block = Expression.Block(
    Expression.Goto(target, Expression.Constant(0)),
    Expression.Label(target, Expression.Constant(-1))
);
/*
    .Block() {
        .Goto SampleLabel { 0 };
        .Label
            -1
        .LabelTarget SampleLabel:
    }
*/

LabelTarget target = Expression.Label();
BlockExpression block = Expression.Block(
    Expression.Goto(target),
    Expression.Label(target)
);
/*
    .Block() {
        .Goto #Label1 { };
        .Label
        .LabelTarget #Label1:
    }
*/

checked 演算子

チェックされた演算子は、演算子の前に # 記号と共に表示されます。 たとえば、チェックされた加算演算子は #+として表示されます。

Expression expr = Expression.AddChecked( Expression.Constant(1), Expression.Constant(2));
/*
    1 #+ 2
*/

Expression expr = Expression.ConvertChecked( Expression.Constant(10.0), typeof(int));
/*
    #(System.Int32)10D
*/