NewExpression
を「コンパイル」して、尖ったnew
の式をインスタンス化できますか?Linq.Expressions.NewExpressionを解決しますか?
オブジェクトを手動で構築する必要がありますか、または構築されたオブジェクトを引数として取得できますか?
まもなく私の質問を更新するつもりです。
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();
}
注: 実行時に、アイテムがParseAsync
関数に渡された引数のみから構成される必要があり、TObj
への適切な参照ができなくなります。
私はNewExpression
を持っているので、オブジェクト(私の例ではUser
)が構築できることを意味します。手動で歩いコンストラクタを見つけ、など