Bagikan melalui


Sintaks DebugView

Properti DebugView (hanya tersedia saat debugging) menyediakan representasi string dari pohon ekspresi. Sebagian besar sintaksis cukup mudah dipahami; kasus khusus dijelaskan di bagian berikut.

Setiap contoh diikuti oleh komentar blok, yang berisi DebugView.

ParameterExpression

ParameterExpression nama variabel ditampilkan dengan $ simbol di awal.

Jika parameter tidak memiliki nama, parameter akan diberi nama yang dibuat secara otomatis, seperti $var1 atau $var2.

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

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

ConstantExpression

Untuk ConstantExpression objek yang mewakili nilai bilangan bulat, string, dan null, nilai konstanta ditampilkan.

Untuk jenis numerik yang memiliki akhiran standar sebagai literal C#, akhiran ditambahkan ke nilai . Tabel berikut ini memperlihatkan akhiran yang terkait dengan berbagai jenis numerik.

Tipe Kata kunci Akhiran
System.UInt32 uint Universitas
System.Int64 panjang L
System.UInt64 ulong UL
System.Double ganda D
System.Single mengapung F
System.Decimal desimal M
int num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
    10
*/

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

BlockExpression

Jika jenis BlockExpression objek berbeda dari jenis ekspresi terakhir di blok, jenis ditampilkan dalam tanda kurung sudut (< dan >). Jika tidak, jenis BlockExpression objek tidak ditampilkan.

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

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

LambdaExpression

LambdaExpression objek ditampilkan bersama dengan tipe delegasi mereka.

Jika ekspresi lambda tidak memiliki nama, ekspresi tersebut diberi nama yang dihasilkan secara otomatis, seperti #Lambda1 atau #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

Jika Anda menentukan nilai default untuk LabelExpression objek, nilai ini ditampilkan sebelum LabelTarget objek.

Token .Label menunjukkan awal label. Token .LabelTarget menunjukkan tujuan target untuk melompat.

Jika label tidak memiliki nama, label diberi nama yang dibuat secara otomatis, seperti #Label1 atau #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:
    }
*/

Operator Yang Diperiksa

Operator yang diperiksa ditampilkan dengan simbol # di depan operator. Misalnya, operator penambahan yang dicentang ditampilkan sebagai #+.

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