加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:46:33 所属栏目:百科 来源:网络整理
导读:这种情况每隔一段时间就会发生在我身上,我总是以同样的方式解决它,然后希望采用更清洁的方式. 我开始调用相关的实用程序函数,然后是更新调用. SynchA();SynchB();UpdateLastTime(); 然后我添加复选框,所以我有: if(synchA.Checked){ SynchA();}if(synchB.Ch
这种情况每隔一段时间就会发生在我身上,我总是以同样的方式解决它,然后希望采用更清洁的方式.

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

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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读