ホームページ >バックエンド開発 >C++ >論理演算子を使用して2つの式オブジェクトを組み合わせる方法は?

論理演算子を使用して2つの式オブジェクトを組み合わせる方法は?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-31 05:41:09354ブラウズ

この記事では、C#の論理演算子を使用して2つの

オブジェクトを組み合わせる方法について説明します。 直接Expression<Func<bool>>またはANDを使用することは不可能です。代わりに、ORExpression.AndAlso、およびOrElseが採用されています。 式が異なるパラメーターを使用すると、複雑さが増加します。 3つのソリューションが提示されています:Not

How to Combine Two Expression Objects Using Logical Operators?
2つのブール式を組み合わせた

課題は、論理と、または、またはそうでないかを使用して、2つのオブジェクトを組み合わせることにあります。

のような単純なアプローチは無効です。

Expression<Func<bool>>expr1 AND expr2solutions

これに対処するいくつかの方法:

メソッド1:

の使用 Invokeこのメソッドは、メソッドを使用して、共通のパラメーターコンテキスト内で各式を実行します。

Invokeメソッド2:パラメーター置換(条件)

<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>
このアプローチは、式が同じパラメーターを共有しているかどうかをチェックします。もしそうなら、よりシンプルな

が使用されます。それ以外の場合は、最初のパラメーターを使用して2番目の式を呼び出します。

メソッド3:

AndAlso

この洗練された方法では、
<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>

メソッドの選択は、表現の複雑さと最適化されたパフォーマンスの必要性に依存します。 方法1は簡単で、方法2はパラメーターと一致するときにパフォーマンスの改善を提供し、方法3は異なるパラメーターを処理するための堅牢なソリューションを提供します。

以上が論理演算子を使用して2つの式オブジェクトを組み合わせる方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。