C# 使用 lambda 表达式评估布尔条件,而不将其存储在变量中

问题描述 投票:0回答:1

我在循环内有一个简单的评估:

var messageDateOk = true;
if (dateFrom != null && messageDate < dateFrom.Value)
    messageDateOk = false;
if (dateTo != null && messageDate > dateTo.Value)
    messageDateOk = false;

if (!messageDateOk)
{
    //Write something in the application log
    continue;
}

我可以使用以下代码替换

messageDateOk

Func<DateTime?, DateTime?, DateTimeOffset, bool> checkDate = (from, to, messageDate) =>
{
    if (from != null && messageDate.Date < from.Value)
        return false;
    if (to != null && messageDate.Date > to.Value)
        return false;
    return true;
};

if (!checkDate(dateFrom, dateTo, messageDate)
{
   //Write log
   continue;
}

但我不喜欢

Func
的明确声明。有没有更优雅的方法来做到这一点?在这个特定情况下,我使用的是 C# 7.3,但即使是较新的 C#,我也希望得到建议。

P.S:我知道我什至可以做到这一点:

if (dateFrom != null && messageDate < dateFrom.Value)
{
   //Write log
   continue;
}
if (dateTo != null && messageDate > dateTo.Value)
{
   //Write log
   continue;
}

..但是出于“教育”目的,我希望看到使用函数式编程的东西。谢谢你

c# lambda functional-programming delegates anonymous-methods
1个回答
0
投票

我要找的东西不存在。写类似内容的更优雅的方式可能是 P.S 中的方式。问题部分

© www.soinside.com 2019 - 2024. All rights reserved.