我很难将下面的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;
}
}
答案 0 :(得分:6)
您的转换似乎正确。但是,我将通过两种方式对其进行改进。
首先,null
上的强制转换不需要if
格式。 (?:
运算符对结果中可能出现的类型和替代位置有某些限制,这导致开发人员插入强制类型转换。)
第二,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
语句。