C# 中的泛型方法

发布于 2024-08-05 21:39:49 字数 629 浏览 8 评论 0 原文

一般来说,通用方法对我来说是新的。需要一个方法,该方法返回泛型类型的集合,但也接受相同泛型类型的集合并接受

Expression<Func<GenericType, DateTime?>>[] Dates 

参数。以下函数中的 T 应该是相同的类型,所以现在我正在使用(简化版本):

private static Collection<T> SortCollection<T>(Collection<T> SortList, Expression<Func<T, DateTime>>[] OrderByDateTime)
{
    return SortList.OrderBy(OrderByDateTime[0]);
}

但我收到错误:

错误:方法的类型参数 'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumberable, System.Func)' 不能 从使用情况推断。尝试 指定类型参数 明确地。

有办法做到这一点吗?

Generic Methods in general are new to me. Need a method that returns a Collection of a generic type, but also takes a collection of the same generic type and takes

Expression<Func<GenericType, DateTime?>>[] Dates 

parameter. T throughout the following function should be the same type, so right now I was using (simplified version):

private static Collection<T> SortCollection<T>(Collection<T> SortList, Expression<Func<T, DateTime>>[] OrderByDateTime)
{
    return SortList.OrderBy(OrderByDateTime[0]);
}

but i'm receiving error:

Error: The type arguments for method
'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumberable,
System.Func)' cannot be
inferred from the usage. Try
specifying the type arguments
explicitly.

Is there anyway to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城缀染半城烟沙 2024-08-12 21:39:49

抱歉回答两次,但这实际上是另一个解决方案。

您传入的是 Expression>,但 Orderby 想要 Func

您可以编译表达式:

return new Collection<T>(SortList.OrderBy(OrderByDateTime[0].Compile()).ToList());

或传入直接将 funcs 作为参数:

private static Collection<T> SortCollection<T>(Collection<T> SortList, Func<T, DateTime>[] OrderByDateTime)
{
    return new Collection<T>(SortList.OrderBy(OrderByDateTime[0]).ToList());
}

我建议阅读 Expressions on msdn

Sorry for answering twice, but this is legitimately another solution.

You're passing in an Expression<Func<T, DateTime>> but Orderby wants a Func<T, DateTime>

You can either compile the expression:

return new Collection<T>(SortList.OrderBy(OrderByDateTime[0].Compile()).ToList());

or pass in straight out funcs as arguments:

private static Collection<T> SortCollection<T>(Collection<T> SortList, Func<T, DateTime>[] OrderByDateTime)
{
    return new Collection<T>(SortList.OrderBy(OrderByDateTime[0]).ToList());
}

I'd recommend reading up on Expressions on msdn

西瑶 2024-08-12 21:39:49

在这种情况下,编译器无法确定您打算向 OrderBy 方法提供什么类型参数,因此您必须显式提供它们:

SortList.OrderBy<T, DateTime>(OrderByDateTime[0])

您可能需要调用 ToList()如果你想要返回一个集合

In this situation, the compiler is failing to figure out what type arguments you intend to provide to the OrderBy method, so you'll have to supply them explicitly:

SortList.OrderBy<T, DateTime>(OrderByDateTime[0])

You'll probably want to call ToList() if you want a Collection to be returned

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文