Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ada daftar besar kelas dalam runtime .NET yang berfungsi dengan Pohon Ekspresi. Anda dapat melihat daftar lengkap di System.Linq.Expressions. Daripada menghitung daftar lengkap, mari kita pahami bagaimana kelas runtime telah dirancang.
Dalam desain bahasa, ekspresi adalah isi kode yang mengevaluasi dan mengembalikan nilai. Ekspresi mungkin sederhana: konstanta ekspresi 1 mengembalikan nilai konstanta 1. Mereka mungkin lebih rumit: Ekspresi (-B + Math.Sqrt(B*B - 4 * A * C)) / (2 * A) mengembalikan satu akar untuk persamaan kuadrat (dalam kasus di mana persamaan memiliki solusi).
System.Linq.Expression serta jenis-jenis turunan
Salah satu kompleksitas bekerja dengan pohon ekspresi adalah bahwa banyak jenis ekspresi yang berbeda berlaku di banyak tempat dalam program. Pikirkan konsep ekspresi penugasan. Sisi kanan tugas bisa berupa nilai konstanta, variabel, ekspresi panggilan metode, atau lainnya. Fleksibilitas bahasa tersebut berarti Anda mungkin menemukan banyak jenis ekspresi yang berbeda di mana saja di simpul pohon saat Anda melintasi pohon ekspresi. Oleh karena itu, ketika Anda bekerja dengan jenis ekspresi dasar, itulah cara paling sederhana untuk bekerja. Namun, terkadang Anda perlu tahu lebih banyak. Kelas Ekspresi dasar berisi NodeType properti untuk tujuan ini. Ini mengembalikan ExpressionType, yang merupakan enumerasi dari jenis ekspresi yang mungkin. Setelah Anda mengetahui jenis simpul, Anda mengubahnya ke jenis tersebut, dan melakukan tindakan tertentu dengan mengetahui jenis simpul ekspresi. Anda dapat mencari jenis node tertentu, lalu bekerja dengan properti tertentu dari jenis ekspresi tersebut.
Misalnya, kode ini mencetak nama variabel untuk ekspresi akses variabel. Kode berikut menunjukkan praktik pemeriksaan jenis node, lalu transmisi ke ekspresi akses variabel lalu memeriksa properti jenis ekspresi tertentu:
Expression<Func<int, int>> addFive = (num) => num + 5;
if (addFive is LambdaExpression lambdaExp)
{
var parameter = lambdaExp.Parameters[0]; -- first
Console.WriteLine(parameter.Name);
Console.WriteLine(parameter.Type);
}
Membuat pohon ekspresi
Kelas ini System.Linq.Expression juga berisi banyak metode statis untuk membuat ekspresi. Metode ini membuat simpul ekspresi menggunakan argumen yang disediakan untuk anak-anaknya. Dengan cara ini, Anda membangun ekspresi dari simpul daunnya. Misalnya, kode ini membangun ekspresi Tambahkan:
// Addition is an add expression for "1 + 2"
var one = Expression.Constant(1, typeof(int));
var two = Expression.Constant(2, typeof(int));
var addition = Expression.Add(one, two);
Anda dapat melihat dari contoh sederhana ini bahwa berbagai jenis terlibat dalam pembuatan dan pengolahan pohon ekspresi. Kompleksitas itu diperlukan untuk memberikan kemampuan kosakata kaya yang disediakan oleh bahasa C#.
Menavigasi API
Ada jenis node Ekspresi yang memetakan ke hampir semua elemen sintaksis bahasa C#. Setiap jenis memiliki metode khusus untuk jenis elemen bahasa tersebut. Sulit untuk menyimpan banyak hal dalam pikiran sekaligus. Daripada mencoba menghafal semuanya, berikut adalah teknik yang Anda gunakan untuk bekerja dengan pohon Ekspresi:
- Lihat anggota
ExpressionTypeenum untuk menentukan kemungkinan simpul yang harus Anda periksa. Daftar ini membantu ketika Anda ingin melintasi dan memahami pohon ekspresi. - Lihat anggota kelas
Expressionyang statis untuk membangun ekspresi. Metode tersebut dapat membangun jenis ekspresi apa pun dari sekumpulan simpul turunan. - Lihatlah kelas
ExpressionVisitoruntuk membangun pohon ekspresi yang dimodifikasi.
Anda menemukan lebih banyak saat Anda melihat masing-masing dari ketiga area tersebut. Tak terlupakan, Anda menemukan apa yang Anda butuhkan saat memulai dengan salah satu dari tiga langkah tersebut.