【问题标题】:Method for filtering out list using logical operators && ||使用逻辑运算符 && || 过滤列表的方法
【发布时间】:2017-01-20 02:39:14
【问题描述】:

我有一个要过滤的广告列表。广告只有一个内容评级:G、PG、PG13 或 R。现在,如果我指定一个内容评级,我有一种方法可以过滤列表。例如,如果我将“G”传递到我的方法中,我会返回列表中只有“G”内容评级的项目。

如果我要提供两个内容分级,例如“G”和“PG”,该方法不会返回任何内容,因为它正在寻找内容分级为“G”和“PG”的广告,而此类广告不存在,因为每个广告只关联一个内容分级。

我想重写我的方法,这样如果我传入两个内容评级,比如“G”和“PG”,它将返回具有“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);

edit:filter 是一个类,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);

【问题讨论】:

  • 你能分享更多你目前的方法吗?参数只是作为字符串输入吗?您提供的部分中使用的参数如何?
  • 为什么不试试标题中提到的||。在这种情况下filter 是什么?它是在哪里定义的?

标签: c# methods filter where operator-keyword


【解决方案1】:

问题是您检查了所有值,而您应该只检查过滤器设置为 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);

据我所知,&&|| 之前被评估

【讨论】:

  • 这行得通!这个解决方案完全逃脱了我。谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多