c# – 如果发生两种情况中的任何一种,那么实现布尔逻辑的更简洁方法是什么?

这种情况每隔一段时间就会发生在我身上,我总是以同样的方式解决它,然后希望采用更清洁的方式.

我开始调用相关的实用程序函数,然后是更新调用.

SynchA();
SynchB();
UpdateLastTime();

然后我添加复选框,所以我有

if(synchA.Checked)
{
  SynchA();
}
if(synchB.Checked)
{
  SynchB();
}

但是现在我只想调用一个或两个一起执行的UpdateLastTime(),因此我总是这样做:

bool synchHappened = false;
if(synchA.Checked)
{
  SynchA();
  synchHappened = true;
}
if(synchB.Checked)
{
  SynchB();
  synchHappened = true;
}
if(synchHappened)
{
  UpdateLastTime();
}

最后一步总是困扰我,因为我将这一个bool传播到三个逻辑分支.

对于我可以使用的上述逻辑/场景,是否有一些明显更好的方法

解决方法

主要目标是 – 每次逻辑发生变化时 – 代码应至少受到影响.
所以你要构建一次这样的东西然后它会对你有用.

在你的特定情况下,我会建议Keep It Simple(没有Strategy Pattern,依此类推),所以
提取并将开关逻辑封装到属性中.因此每次需求都会改变 – 您需要更新特定开关或主逻辑本身的逻辑.

带有封装规则的交换机:

bool IsUpdateLastTime
{
 get
 {
    // logic here even can be fully or partially injected 
    // as Func<bool>
    return this.IsSyncA || this.IsSyncB;
 }
}

bool IsSyncA { get { return synchA.Checked; } }
bool IsSyncB { get { return synchB.Checked; } }

主要逻辑:

if (this.IsUpdateLastTime)
{
  this.UpdateLastTime();
}

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...