Pengenalan Masalah:
Dalam pengaturcaraan, selalunya perlu untuk menentukan sama ada dua ungkapan lambda mewakili fungsi yang sama. Ini mungkin mencabar kerana sifat dinamik ekspresi lambda dan kekurangan kaedah perbandingan AST yang boleh diakses.
Pernyataan Masalah:
Memandangkan tandatangan kaedah berikut:
public bool AreTheSame<T>(Expression<Func<T, object>> exp1, Expression<Func<T, object>> exp2)
Apakah cara paling berkesan untuk menentukan sama ada dua ungkapan lambda adalah sama? Ungkapan yang dimaksudkan adalah terhad kepada MemberExpressions mudah (seperti c => c.ID).
Penyelesaian:
Untuk membandingkan ungkapan lambda dengan cekap, seseorang boleh menggunakan algoritma tersuai yang beroperasi pada AST asasnya (Pokok Sintaks Abstrak). Berikut ialah versi kod Marc yang dipertingkatkan yang menyokong pelbagai senario dan tersedia sebagai pakej NuGet:
public static class LambdaCompare { // ... (code omitted for brevity) ... }
Penyelesaian yang dikemas kini ini menawarkan beberapa kelebihan berbanding pendekatan sebelumnya:
Contoh Penggunaan:
var result = LambdaCompare.Eq(u1 => u1.ID, u2 => u2.ID); // returns true
Faedah Menggunakan LambdaBandingkan:
Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Kesamaan Dua Ungkapan Lambda dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!