无法强制转换称为方法类型 IEnumerable <Tuple>的反射



在反射中调用方法时出错,无法将结果强制转换为其基类型(IEnumerable<Tuple<SortingOrder, Expression>>),这似乎很奇怪。

当我在Expression中转换另一个方法时,我没有这个问题。我想问题出在IEnumerable或Tuple上。有人知道怎么做吗?

当我调用下面的第一个方法时出错:

public static IEnumerable<Tuple<SortingOrder, Expression>> ConvertOrderByToTupleExpression(Type entityType, string orderBy)
{
return (IEnumerable<Tuple<SortingOrder, Expression>>)typeof(RepositoryReflectionHelper)
.GetMethods()
.First(x => x.Name == nameof(RepositoryReflectionHelper.ConvertOrderByToTupleExpression) && x.IsGenericMethod && x.GetParameters().Count() == 1)
.MakeGenericMethod(new Type[] { entityType })
.Invoke(null, new object[] { orderBy });
}
public static IEnumerable<Tuple<SortingOrder, Expression<Func<TEntity, object>>>> ConvertOrderByToTupleExpression<TEntity>(string orderBy)
{
List<Tuple<SortingOrder, Expression<Func<TEntity, object>>>> orderByCriteriaTuple = new List<Tuple<SortingOrder, Expression<Func<TEntity, object>>>>();
return orderByCriteriaTuple;
}

更新:"相同的错误";反向";以下代码中的操作:

IEnumerable<Tuple<SortingOrder, Expression>> orderByExpression = RepositoryReflectionHelper.ConvertOrderByToTupleExpression(entityType, orderBy);
var calledFunction = GetManyPaging(orderByExpression);
public IEnumerable<TEntity> GetManyPaging(IEnumerable<System.Tuple<SortingOrder, Expression<Func<TEntity, object>>>> orderByCriteriaTuple)
{
// Do something not significant
}



感谢

C#不支持类的方差,但您可以利用它支持接口的方差的事实,IEnumerable<T>是协变接口,Tuple<T1, T2>实现ITuple:

object tuple = new[]
{
new Tuple<int, Expression<Func<int>>>(1, () => 1)
};
IEnumerable<Tuple<int, Expression>> enumerable = ((IEnumerable<ITuple>)tuple)
.Select(t => Tuple.Create((int)t[0], (Expression) t[1]))
.ToList(); // to list to make sure it does work

相关内容

最新更新