首页 > 解决方案 > 如何使用 linq 返回布尔值

问题描述

我有一个 foreach 循环,我在其中迭代一个列表以确保每个项目都是有效的并且想要返回一个布尔值。

这是我的 foreach 代码:

bool isValid = true;

foreach (var req in requestList)
{
    if (!req.ChannelId.HasValue || !req.PayoutAmountInCents.HasValue)
    {
        isValid = false;
        PayoutFDEvents.LogInvalidPayoutRequest(this.BuildPayoutFDDocument(req), "missing channelId or patronage amount");
    }
}   

这是我将其转换为 linq 语句的尝试:

var isValid = requestList
    .Select(r =>
    {
        if (!r.ChannelId.HasValue || !r.PayoutAmountInCents.HasValue)
        {
            PayoutFDEvents.LogInvalidPayoutRequest(this.BuildPayoutFDDocument(r), "missing channelId or patronage amount");
            return false;
        }
        return true;
    });

但是,看起来我的实现返回了一个布尔列表。有没有办法可以返回一个整体的布尔值?

标签: c#linq

解决方案


这可以转换为一个简单的表达式,如下所示:

var isValid = requestList.All(r => r.ChannelId.HasValue && r.PayoutAmountInCents.HasValue)

我建议你不要在你的表情中间记录一些东西——这只是很臭,一旦你转换为使用就不会很好用All()


推荐阅读