我正在尝试使用单个Func<T,bool>
定义来处理类及其继承者。这就是我所拥有的:
Func<Job, bool> ValidJob =
j => !j.Deleted && !j.OnHold && j.PostDate <= DateTime.Now && j.ExpireDate > DateTime.Now;
public class JobExtended : Job { }
因此,鉴于此,以下工作:
IQueryable<Job> jobs = ...
jobs.Where(ValidJob);
但是,以下情况并非如此:
IQueryable<JobExtended> jobs = ...
jobs.Where(ValidJob);
我想知道在这种情况下是否有可能只有一个Func<T,bool>
,如果是的话,怎么样?我已经尝试按照建议指定类型参数但是没有运气。
答案 0 :(得分:6)
这将适用于C#4,其中代表具有通用协方差和逆变,但在此之前不会。但是,您可以从C#2开始轻松使用现有委托:
jobs.Where(new Func<JobExtended, bool>(ValidJob));
答案 1 :(得分:3)
以下是解决方案的变体:在命名函数中使用泛型类型:
public static bool ValidJob<T>(T j) where T : Job
{
return
!j.Deleted &&
!j.OnHold &&
j.PostDate <= DateTime.Now &&
j.ExpireDate > DateTime.Now;
}
然后这些会起作用:
IQueryable<Job> jobs = ...
jobs.Where(ValidJob);
IQueryable<JobExtended> jobs = ...
jobs.Where(ValidJob);