Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。2,700件2次のような関数を作ろうとしています。いう感じに呼び出して、変数名xとその値を同時に渡したいのです。このようなExpression<T>のコンストラクタは存在しないので、このままでは実現できません。Hoge()の引数をExpression<Func<int>>にして、Compile()してから実行して値を取り出す、というのも可能ですが、Compile()がとても遅いのでやりたくないです。変換は逆コンパイルをするようなものです。変形するのも容易でしょう。ラムダ式をデリゲートと式木(あるいは文字列)の両方にコンパイルできると便利そうですが、実装される気はしないですね・・・。いった式を期待されているようですが、単純なフィールド・プロパティアクセスならリフレクションを使うと速いかもしれません。|2質問の状況であれば逆コンパイルによってFunc<int>から変数名を読み取ることは可能です。考え方としてはDelegateインスタンスのMethodプロパティからMethodInfoを取得するMethodInfoからGetMethodBody().GetILAsByteArray()でILコードを取得するIL中のldfld(0x7B)がフィールドから値を読みだしている箇所で、続く4バイト(リトルエンディアン)がFieldInfo.MetadataTokenに該当するフィールドの定義されているModuleHandleはDelegate.Target→Object.GetType()→Type.TypeHandle→RuntimeTypeHandle.GetModuleHandle()で取得できるModuleHandle.ResolveFieldHandle(int)でメタデータトークンからハンドルが取得できるFieldInfo.GetFieldFromHandle()でFieldInfoが取得できるのようになります。6.0になるとnameof演算子が導入されるので変数名を渡すのも楽になります。3.0の匿名型+拡張メソッドで対処できる場合もあります。|1おそらく、無いと思います。Func<T>>みたいなものにキャッシュしておくと2回目からは早くできます。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。