DebugView söz dizimi

DebugView özelliği (yalnızca hata ayıklama sırasında kullanılabilir), ifade ağaçlarının dize işlemesini sağlar. Söz diziminin çoğunu anlamak oldukça kolaydır; özel durumlar aşağıdaki bölümlerde açıklanmıştır.

Her örneği, DebugView içeren bir blok açıklaması izler.

Parameterexpression

ParameterExpression değişken adları başlangıçta bir $ simgeyle görüntülenir.

Bir parametrenin adı yoksa, veya $var2gibi $var1 otomatik olarak oluşturulan bir ad atanır.

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

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

Constantexpression

Tamsayı ConstantExpression değerlerini, dizeleri ve nulldeğerlerini temsil eden nesneler için sabitin değeri görüntülenir.

Standart sonekleri C# değişmez değerleri olan sayısal türler için, değere sonek eklenir. Aşağıdaki tabloda çeşitli sayısal türlerle ilişkilendirilmiş sonekler gösterilmektedir.

Tür Anahtar sözcük Soneki
System.UInt32 uint U
System.Int64 long L
System.UInt64 ulong UL
System.Double double D
System.Single float F
System.Decimal ondalık M
int num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
    10
*/

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

Blockexpression

Nesnenin BlockExpression türü bloktaki son ifadenin türünden farklıysa, tür köşeli ayraçlar (< ve >) içinde görüntülenir. Aksi takdirde, nesnenin BlockExpression türü görüntülenmez.

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

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

Lambdaexpression

LambdaExpression nesneleri, temsilci türleriyle birlikte görüntülenir.

Lambda ifadesinin adı yoksa, veya #Lambda2gibi #Lambda1 otomatik olarak oluşturulan bir ad atanır.

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

Nesne için LabelExpression varsayılan bir değer belirtirseniz, bu değer nesneden LabelTarget önce görüntülenir.

Belirteç, .Label etiketin başlangıcını gösterir. Belirteç .LabelTarget , atlaması gereken hedefin hedefini gösterir.

Bir etiketin adı yoksa, veya #Label2gibi #Label1 otomatik olarak oluşturulan bir ad atanır.

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

İşaretli İşleçler

İşaretlenen işleçler işlecin önünde simgesiyle # birlikte görüntülenir. Örneğin, denetlenen ekleme işleci olarak #+görüntülenir.

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