Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
*/