共用方式為


DebugView 語法

DebugView 屬性(只有在偵錯時才可使用)提供表示式樹狀架構的字串轉譯。 大部分的語法相當簡單明瞭;下列各節將說明特殊案例。

每個範例後面接著一個區塊批注,其中包含 DebugView

參數表達式

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 U
System.Int64 L
System.UInt64 ulong UL
System.Double 雙倍 D
System.Single 浮動 F
System.Decimal 十進位 M
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 物件會與其委派類型一起顯示。

如果 Lambda 表示式沒有名稱,則會指派自動產生的名稱,例如 #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:
    }
*/

驗證的運算子

核取的運算子會顯示在運算子前面加上 # 符號。 例如,核取的加法運算子會顯示為 #+

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
*/