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

c# – 如何将嵌套的三元运算符转换为嵌套的if-else语句?

发布时间:2020-12-16 01:28:43 所属栏目:百科 来源:网络整理
导读:我很难将以下C#代码转换为if-else语句,这样我就能理解业务逻辑.任何人都可以帮助我,检查我的转换是否正常? 码: dateInit = objInstance == null ? (DateTime?)null: objInstance.DateAnt == null ? objInstance.DatePost otherObjInstance.DateCon ? (Date
我很难将以下C#代码转换为if-else语句,这样我就能理解业务逻辑.任何人都可以帮助我,检查我的转换是否正常?

码:

dateInit = objInstance == null ? (DateTime?)null:
                objInstance.DateAnt == null ?
                    objInstance.DatePost > otherObjInstance.DateCon ?
                        (DateTime?)null :
                        objInstance.DatePost :
                objInstance.DateAnt;

我的转换:

if (objInstance == null)
{
    dateInit = (DateTime?)null;
}
else
{
    if (objInstance.DateAnt == null)
    {
        if (objInstance.DatePost > otherObjInstance.DateCon)
        {
            dateInit = (DateTime?)null;
        }
        else
        {
            dateInit = objInstance.DatePost;
        }
    }
    else
    {
        dateInit = objInstance.DataAnt;
    }
}

解决方法

您的转化似乎是正确的.但是,我会以两种方式改进它.

首先,在if表单中不需要null的强制转换. (?:运算符对结果和替代位置中可能出现的类型有一定的限制,这会导致开发人员插入强制转换.)

其次,if语句不必要地嵌套.整个事情可以表达得更加可读:

if (objInstance == null)
  dateInit = null;
else if (objInstance.DateAnt != null)
  dateInit = objInstance.DataAnt;
else if (objInstance.DatePost > otherObjInstance.DateCon)
  dateInit = null;
else
  dateInit = objInstance.DatePost;

从这个版本开始,业务逻辑比我认为的版本更容易理解.

我们可以使用两个规则进行转换.第一:

if (x)
  X
else 
{
  if (y)
    Y
  else
    Z
}

是相同的

if (x)
  X
else if (y)
  Y
else
  Z

这在页面上更简单.

第二个:

if (x)
{
  if (y)
    Y
  else
    Z
}
else
  NX

是相同的

if (!x)
  NX
else 
{
  if (y)
    Y
  else
    Z
}

现在我们再次处于第一种情况,可以进一步简化.

通过重复组合这些规则,您可以简化许多复杂的if-else语句.

(编辑:李大同)

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

    推荐文章
      热点阅读