Pertimbangkan tandatangan kaedah:
public bool AreTheSame<T>(Expression<Func<T, object>> exp1, Expression<Func<T, object>> exp2)
Bagaimana boleh anda cekap menentukan sama ada dua ungkapan lambda adalah sama? Kaedah ini hanya boleh mengendalikan ungkapan mudah, khususnya MemberExpressions dalam bentuk c => c.ID.
public static bool Eq<TSource, TValue>( Expression<Func<TSource, TValue>> x, Expression<Func<TSource, TValue>> y) { return ExpressionsEqual(x, y, null, null); }
Kaedah ini membandingkan ungkapan dengan memecahkannya kepada bahagian konstituennya dan membandingkan setiap bahagian secara individu. Ia tidak melakukan perbandingan AST penuh, tetapi sebaliknya meruntuhkan sebarang ungkapan malar dan membandingkan nilainya secara langsung.
Pelaksanaan kaedah ExpressionsEqual membandingkan secara rekursif bahagian berlainan ungkapan. Sebagai contoh, jika ungkapan adalah MemberExpressions, ia membandingkan sifat Ahli bagi setiap ungkapan. Jika ia BinaryExpressions, ia membandingkan sifat Kaedah, Kiri dan Kanan.
Kaedah ini mengendalikan kes khas seperti ConditionalExpressions dan NewArrayExpressions. Ia juga mengendalikan kes di mana ungkapan mempunyai jenis yang berbeza, termasuk jenis tanpa nama.
Prestasi kaedah ini jauh lebih baik daripada perbandingan AST penuh, terutamanya untuk ungkapan yang mengandungi nilai tetap. Ini menjadikannya sesuai untuk kes penggunaan seperti pengesahan olok-olok, di mana ungkapan lambda mungkin merujuk pembolehubah setempat yang harus dibandingkan mengikut nilai.
Kod ini tersedia sebagai pakej NuGet, yang boleh dipasang menggunakan arahan berikut:
Install-Package LambdaCompare
Penggunaan kaedah Eq ialah mudah:
var f1 = GetBasicExpr1(); var f2 = GetBasicExpr2(); Assert.IsTrue(LambdaCompare.Eq(f1, f2));
Kaedah yang cekap untuk membandingkan ungkapan lambda ini menyediakan cara yang mudah dan berprestasi untuk menentukan kesamarataan mereka. Ia amat berguna dalam senario di mana nilai pembolehubah tempatan perlu dibandingkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Ungkapan Lambda dengan Cekap untuk Kesaksamaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!