問題の導入:
プログラミングでは、多くの場合、2 つの式が等しいかどうかを判断する必要があります。ラムダ式は同じ機能を表します。ラムダ式の動的な性質と、アクセス可能な AST 比較メソッドがないため、これは困難な場合があります。
問題ステートメント:
次のメソッド シグネチャがあるとします:
public bool AreTheSame<T>(Expression<Func<T, object>> exp1, Expression<Func<T, object>> exp2)
2 つのラムダ式が同一かどうかを判断する最も効率的な方法は何ですか?問題の式は、単純な MemberExpressions (c => c.ID など) に限定されています。
解決策:
ラムダ式を効率的に比較するには、以下を使用できます。基礎となる AST (抽象構文ツリー) 上で動作するカスタム アルゴリズム。以下は、さまざまなシナリオをサポートし、NuGet パッケージとして利用できる Marc のコードの改良版です:
public static class LambdaCompare { // ... (code omitted for brevity) ... }
この更新されたソリューションには、以前のアプローチに比べていくつかの利点があります:
使用例:
var result = LambdaCompare.Eq(u1 => u1.ID, u2 => u2.ID); // returns true
LambdaCompare を使用する利点:
以上が2 つのラムダ式の等価性を効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。