ホームページ >バックエンド開発 >C++ >C# の関数を式に変換するにはどうすればよいですか?

C# の関数を式に変換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-03 09:25:39936ブラウズ

How Can I Convert a C# Func to an Expression?

C# Func の変換to Expression

C# では、ラムダ式は軽量関数を表す便利な方法を提供します。ラムダを Expression> に変換するのは簡単ですが、メソッド呼び出しを使用すると、Func を変換するシナリオが存在する可能性があります。

課題

ただし、次のコードに示すように、コンパイル時エラーのため、そのような直接変換は不可能です。 :

public void ContainTheDanger(Func<T> dangerousCall)
{
    try
    {
        dangerousCall();
    }
    catch (Exception e)
    {
        // This next line does not work...
        Expression<Func<T>> DangerousExpression = dangerousCall;
        var nameOfDanger = ((MemberExpression)dangerousCall.Body).Member.Name;
        throw new DangerContainer("Danger manifested while " + nameOfDanger, e);
    }
}

このエラーは、Func が実行されていないことが原因で発生します。

制限

残念ながら、目的の変換を達成する簡単な方法はありません。 Func から元の式を取得しようとしています。コンパイル中の最適化とデータ損失により、実行不可能であることが判明する可能性があります。

代替アプローチ

代替案として、次のことを検討できます。

  • 使用Func を検査するためのリフレクション
  • カスタム式コンパイラまたは動的オブジェクト モデルを使用して、Func に基づいて式ツリーを作成します。

ただし、これらのアプローチには通常、複雑な処理が含まれます。そして間違いが起こりやすい

結論

Func の変換Expression> への変換C# では直接的な処理は本質的に困難です。複雑さと潜在的な制限を犠牲にして、代替アプローチが検討される可能性があります。

以上がC# の関数を式に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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