这可能是一个相对简单的疏忽,但是如果我真的被允许这样做,或者是一个合理的选择(在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 type
和Cannot implicitly convert type 'System.DateTime' to 'TOrderBy'
。正如您可能可以解决的那样,我正在尝试构建一个类,该类在构造函数中获取信息以对IQueryable进行排序和分页。
我想通过重载的构造函数提供默认值。我将如何去做呢?
最佳答案
a => a.Time
时间是
DateTime
。 TOrderBy
可能不是DateTime
,例如:MyClass1<Car> x = new MyClass1<Car>(ids);
因此,您无法做您想做的事情。
TOrderBy
真是太痛苦了!最好的主意是,如果可以帮助的话,最好不要在类中加入TOrderBy
来避免出现此问题。 This answer显示了一种包装订购表达式的方法,以使TOrderBy对外界隐藏。关于c# - 在构造函数中的Expression <Func <MyType,TOrderBy >>中使用泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10031074/