使用逻辑运算符&& ||过滤列表的方法

Method for filtering out list using logical operators && ||

我有一个要作为过滤依据的广告列表。这些广告只有一个内容分级:G、PG、PG13 或 R。现在,如果我只指定一个内容分级,我有一种方法可以过滤列表。例如,如果我将 "G" 传入我的方法,我将返回列表中只有 "G" 内容评级的项目。

如果我要提供两个内容分级,例如 "G" 和 "PG",该方法不会 return 任何东西,因为它正在寻找内容分级为 [=22] 的广告=] 和 "PG" 这样的广告是不存在的,因为每个广告只关联一个内容分级。

我想重写我的方法,这样如果我传入两个内容评级,比如 "G" 和 "PG",它将 return 具有以下任一内容的广告列表 "G" 或 "PG"。

这是我的方法中需要解决的部分:

adList = adList.Where(ad => ad.IsG == filter.ContentRatings.IsG
        && ad.IsPG == filter.ContentRatings.IsPG
        && ad.IsPG13 == filter.ContentRatings.IsPG13
        && ad.IsR == filter.ContentRatings.IsR);

编辑:过滤器是 class、ad.IsPG 和 filter.ContentRatings.IsG(IsPG13、IsR、IsG)是布尔值。如果您想知道,这行不通。

adList = adList.Where(ad => ad.IsG == filter.ContentRatings.IsG
        || ad.IsPG == filter.ContentRatings.IsPG
        || ad.IsPG13 == filter.ContentRatings.IsPG13
        || ad.IsR == filter.ContentRatings.IsR);

那么你应该使用 or 运算符 ||而不是 && 运算符。使用 && 检查以确保左右操作数都为真。换句话说,您的语句只会 return 所有四个条件都为真的值。

问题是您检查了所有值,而您应该只检查过滤器设置为 true 的广告值。

也许一些代码会更清楚:

adList = adList.Where(ad => 
           filter.ContentRatings.IsG && ad.IsG
        || filter.ContentRatings.IsPG && ad.IsPG
        || filter.ContentRatings.IsPG13 && ad.IsPG13
        || filter.ContentRatings.IsR && ad.IsR);

据我所知 &&||

之前计算