繁体   English   中英

使用单个Func <T,bool> with Where()和继承

[英]Using a single Func<T,bool> with Where() and inheritance

我正在尝试使用单个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> ,如果是的话,怎么样? 我已经尝试按照建议指定类型参数,但我没有运气。

这将在C#4中起作用,其中代表具有通用的协方差和逆变,但在此之前不会。 但是,您可以从C#2开始轻松使用现有委托:

jobs.Where(new Func<JobExtended, bool>(ValidJob));

以下是解决方案的变体:在命名函数中使用泛型类型:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM