Rumah >pembangunan bahagian belakang >C++ >Bagaimana Menggabungkan Ekspresi Logik Dalam C# Ekspresi?

Bagaimana Menggabungkan Ekspresi Logik Dalam C# Ekspresi?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-31 05:51:08986semak imbas

How to Combine Logical Expressions in C# Expression?

Dalam ekspresi C#, gabungkan ekspresi logik

Apabila anda mempunyai dua ungkapan jenis

, anda mungkin perlu menggunakan pengendali logik (seperti dan, atau, atau tidak) untuk menggabungkannya. Artikel ini membincangkan pelbagai kaedah untuk mencapai matlamat ini.

Expression<Func<bool>> contoh parameter yang sama

Jika kedua -dua ungkapan menggunakan yang sama, gabungannya mudah:

ParameterExpression Ini juga terpakai untuk menafikan satu operasi:

<code class="language-csharp">var body = Expression.AndAlso(expr1.Body, expr2.Body);
var lambda = Expression.Lambda<Func<bool>>(body, expr1.Parameters[0]);</code>
Contoh parameter yang berbeza

<code class="language-csharp">static Expression<Func<bool>> Not<T>(
    this Expression<Func<bool>> expr)
{
    return Expression.Lambda<Func<bool>>(
        Expression.Not(expr.Body), expr.Parameters[0]);
}</code>
Jika ungkapan menggunakan contoh parameter yang berbeza, anda boleh menggunakan

untuk menggabungkan:

Kaedah ini juga boleh digunakan untuk

dan Invoke.

<code class="language-csharp">static Expression<Func<bool>> AndAlso<T>(
    this Expression<Func<bool>> left,
    Expression<Func<bool>> right)
{
    var param = Expression.Parameter(typeof(T), "x");
    var body = Expression.AndAlso(
            Expression.Invoke(left, param),
            Expression.Invoke(right, param)
        );
    var lambda = Expression.Lambda<Func<bool>>(body, param);
    return lambda;
}</code>
kaedah umum

OrElse Not Untuk menangani kedua -dua situasi ini, satu kaedah umum dapat mengesan parameter mana yang sepadan dan pilih kaedah gabungan yang sesuai:

keserasian ef

dari .net 4.0,

menyediakan mekanisme untuk membina ekspresi serasi EF:
<code class="language-csharp">static Expression<Func<bool>> AndAlso<T>(
    this Expression<Func<bool>> expr1,
    Expression<Func<bool>> expr2)
{
    ParameterExpression param = expr1.Parameters[0];
    if (ReferenceEquals(param, expr2.Parameters[0]))
    {
        return Expression.Lambda<Func<bool>>(
            Expression.AndAlso(expr1.Body, expr2.Body), param);
    }
    return Expression.Lambda<Func<bool>>(
        Expression.AndAlso(
            expr1.Body,
            Expression.Invoke(expr2, param)), param);
}</code>

Dengan memilih kaedah yang konsisten dengan adegan khusus anda, anda dapat menggabungkan ekspresi logik dengan berkesan dalam contoh .

Atas ialah kandungan terperinci Bagaimana Menggabungkan Ekspresi Logik Dalam C# Ekspresi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn