如何将嵌套的三元运算符转换为嵌套的 if-else 语句?
How do I convert nested ternary operator to nested if-else statements?
我很难尝试将以下 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
语句。
我很难尝试将以下 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
语句。