【发布时间】:2018-07-06 06:34:34
【问题描述】:
我有一个看起来像这样的函数:
static public IQueryable<TSource> OrderData<TSource, TKey>(this IQueryable<TSource> source,
System.Linq.Expressions.Expression<Func<TSource, TKey>> keySelector,
Sort.SortDirection sortDirection)
{
if (sortDirection == Sort.SortDirection.Ascending)
{
return source.OrderBy<TSource, TKey>(keySelector);
}
else
{
return source.OrderByDescending<TSource, TKey>(keySelector);
}
}
现在这很好,直到我需要对 IEnumerable 容器做同样的事情。我可以称之为,在进出容器的过程中投射容器,但我想知道是否有办法使容器本身成为通用参数,并且仍然可以工作。
我想要类似的东西:
static public C<TSource> OrderData<C, TSource, TKey>(this C<TSource> source,
System.Linq.Expressions.Expression<Func<TSource, TKey>> keySelector,
Sort.SortDirection sortDirection) where C : IEnumerable<TSource>
这不会编译,会给出诸如“',' expected”之类的基本错误。有什么想法吗?
【问题讨论】:
-
“不起作用”是什么意思?异常还是编译器错误?为什么你甚至想要
C<TSource评估为IEnumerable<TSource<TSource>>?我想你只想要C source。无论如何,您不能将泛型参数限制为另一个。 -
对不起,这有点模棱两可。它无法编译。
标签: c# generics containers