使用 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#,我也希望得到建议。

我知道我可以做到这一点:

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

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

我要找的东西可能不存在。在这种情况下,lambda 表达式和局部函数对于这样一个简单的任务都需要太多代码。 所以,对我来说,更好看的编写方式是问题的前一个代码块中的方式

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

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

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