我很难将以下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;
}
}
您的转化似乎是正确的。但是,我会以两种方式改进它。
首先,在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
语句。