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 $var2
gibi $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 null
değ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 #Lambda2
gibi #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 #Label2
gibi #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
*/
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin