Aracılığıyla paylaş


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.

Parametre İfadesi

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

Bir parametrenin adı yoksa, $var1 veya $var2 gibi 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.

C# değişmez değerleri olarak standart sonekleri olan sayısal türler için, bu sonek değere eklenir. Aşağıdaki tablo, çeşitli sayısal türlerle doğrudan ilişkili olan sonekleri göstermektedir.

Türü Anahtar sözcük Sonek
System.UInt32 işaretsiz tam sayı U
System.Int64 uzun L
System.UInt64 ulong UL
System.Double çift D
System.Single batmadan su yüzeyinde durmak 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, #Lambda1 veya #Lambda2 gibi 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, #Label1 veya #Label2 gibi 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:
    }
*/

Denetimli İş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
*/