2

这可能是一个相对简单的疏忽,但我无法确定我是否真的被允许这样做,或者可能是一个合理的替代方案(在 VS2010、C# .Net 4.0 中使用)。如果可能的话,我强烈希望在构造函数中这样做。

这是我的课:

public class MyClass1<TOrderBy> : MyInterface1<MyType1, MyType2>
{
    public MyClass1(IEnumerable<Guid> ids) : this(ids, 0, 10, a => a.Time, ListSortDirection.Ascending) { }

    public MyClass1(IEnumerable<Guid> ids, int pageIndex, int itemsPerPage, Expression<Func<MyType2, TOrderBy>> orderBy, ListSortDirection sortDirection)
        {
            this.pageIndex = pageIndex;
            this.itemsPerPage = itemsPerPage;
            this.orderBy = orderBy;
            this.sortDirection = sortDirection;
            this.ids = ids != null ? ids.ToList() : new List<Guid>();
        }
}

我得到错误

Cannot convert expression type 'System.DateTime' to return type 'TOrderBy'悬停时a => a.Time

以及错误Cannot convert lambda expression to delegate type 'System.Func<MyType2,TOrderBy>' because some of the return types in the block are not implicitly convertible to the delegate return typeCannot implicitly convert type 'System.DateTime' to 'TOrderBy'构建时。

正如您可能知道的那样,我正在尝试构建一个类,该类在构造函数中获取信息以对 IQueryable 进行排序和分页。我想通过重载的构造函数提供默认值。我该怎么做呢?

4

1 回答 1

0
a => a.Time

时间是一个DateTimeTOrderBy可能不是 a DateTime,例如:

MyClass1<Car> x = new MyClass1<Car>(ids);

所以,你不能做你想做的事。


TOrderBy是一个很大的痛苦!最好的办法是避免这个问题,TOrderBy如果你能提供帮助的话,不要把它作为课堂的一部分。 这个答案显示了一种包装排序表达式以向外界隐藏 TOrderBy 的方法。

于 2012-04-05T15:48:44.037 回答