[解決済み] Linq.Expressions.NewExpressionを解決しますか?
2022-02-24 11:23:30
質問
を「コンパイル」するにはどうすればよいのでしょうか?
NewExpression
をインスタンス化するために、尖った
new
という表現になるのでしょうか?
オブジェクトを手動で構築する必要がありますか、それとも構築されたオブジェクトを引数として取得すればよいのですか?
近々、私の質問を例として更新するつもりです。
class Obj
{
public async Task ParseAsync<TObj>(Expression<Func<TObj, Task>> pointedMethod)
{
var method = pointedMethod.Body as MethodCallExpression;
var arg = method.Arguments[0];
var newExp = arg as NewExpression;
//This is what I need:
User = newExp.ConstructObject();
await Task.FromResult((object)null);
}
public async Task MyMethod(User user)
{
await Task.FromResult((object)null);
}
}
static void Main(string[] args)
{
var obj = new Obj();
obj.ParseAsync<Obj>(o => o.MyMethod(new User())).Wait();
}
注意事項
実行時に
TObj
に与えられた引数のみから構築されなければならない。
ParseAsync
関数を使用します。
を持っているので
NewExpression
ということは、そのオブジェクト(
User
は構築することが可能です。
問題は、手作業でコンストラクタを見つけて呼び出すなどせずに、オブジェクトをインスタンス化する方法があるかどうかということです。
どのように解決するのですか?
回答は元々@によって回答されました。 ダスブリンクライト なぜ彼がそれを削除したのか、私にはわからない。とにかく、彼が自分の回答を削除することを選択した場合、私は私の回答を削除し、彼の功績を称えたいと思います
とにかく参考にしてください。
<ブロッククオート答えは、問題の NewExpression があるかどうかで決まります。 はパラメータを参照し、そのパラメータにアクセスできるかどうか。 の式がある場合に備えています。
NewExpression にパラメータがない場合、単純にラムダ を作成し、コンパイルして実行します。
NewExpression myNewExpression = ... // You have this
var instantiator = (Func<MyResultType>)Expression
.Lambda<Func<MyResultType>>(myNewExpression)
.Compile();
MyResultType res = instantiator();
関連
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】プロセスが実行されているかどうかを知るには?