【发布时间】:2013-09-08 13:06:27
【问题描述】:
我有一堂电影课:
internal class Movie
{
public string Name { get; set; }
public string Year { get; set; }
}
我有这个代码:
var Movies = CreateMovies(); //IEnumerable<Movie>
var sorter = new Sorter<Movie>();
sorter.AddSort(Movies, m => m.Year , a=>a.Name ,.....as many as I want....);
这里是Sorter 类:
class Sorter<T>
{
public void AddSort(IEnumerable<T> movs, params Expression<Func<T, object>>[] funcs)
{
/*...*/
movs.OrderBy(d=>d.); //<----- here is the problem : where is the columns ?
}
}
问题:
当我需要d 上的智能时,它会告诉我:
我不明白为什么T 不被推断为Movie:
看看有多少位置推断T 是Movie:
我怎样才能让这些电影字段出现,而不更改为Ienumerable<Movies>?
【问题讨论】:
-
泛型不是这样工作的。
-
当您将其更改为
<Movie>时,编译器就会知道您正在使用Movie项目。使用<T>,编译器将如何在方法中解析该类型参数? -
当 AddSort 被调用时会发生什么?
-
@BoltClock 是的,我忘了添加通用约束。 ( 太累了)。谢谢。 我投票关闭它。