微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐