小编Gar*_*son的帖子

无法在Expression <Func <... >>和Func <...>之间进行转换

我试图呼叫的方法(第三方,不能改变)期望a Func<TResult>.使用反射我试图做一个例如,Func<Task<IEnumerable<Person>>>但我无意中创建了一个Expression<Func<Task<IEnumerable<Person>>>>.反思的原因是人是任意的,可以是任何类型,取决于如何/何时调用它.

// trying to mimic this hard-code: () => TaskEx.FromResult(Enumerable.Empty<Person>())
//var enumerableType = typeof(Person); //potentially

var empty = (typeof(Enumerable)).GetMethod("Empty");
var genereicEmpty = empty.MakeGenericMethod(enumerableType);
var emptyEnumerable = genereicEmpty.Invoke(null, null);

var fromResult = typeof (TaskEx).GetMethod("FromResult");
var genericFromResult = fromResult.MakeGenericMethod(genereicEmpty.ReturnType);

var enumerableTask = genericFromResult.Invoke(null, new [] {emptyEnumerable});

var functype = typeof(Func<>).MakeGenericType(genericFromResult.ReturnType);
var body = Expression.Constant(enumerableTask);
var lambdaType = typeof(Expression).GetMethods()
    .Where(x => x.Name == "Lambda")
    .Where(x => x.GetParameters().Length == 2)
    .Where(x => x.GetParameters()[1].ParameterType == typeof(ParameterExpression[]))
    .Single(x => x.IsGenericMethod); …
Run Code Online (Sandbox Code Playgroud)

.net c# generics reflection lambda

0
推荐指数
1
解决办法
973
查看次数

标签 统计

.net ×1

c# ×1

generics ×1

lambda ×1

reflection ×1