Ped*_*lho 3 c# datetime if-statement ternary
我很难将下面的C#代码转换为if-else语句,以便可以理解业务逻辑。有人可以帮我检查我的转换是否正常吗?
码:
dateInit = objInstance == null ? (DateTime?)null:
objInstance.DateAnt == null ?
objInstance.DatePost > otherObjInstance.DateCon ?
(DateTime?)null :
objInstance.DatePost :
objInstance.DateAnt;
Run Code Online (Sandbox Code Playgroud)
我的转换:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您的转换似乎正确。但是,我将通过两种方式对其进行改进。
首先,形式上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;
Run Code Online (Sandbox Code Playgroud)
从这个版本开始,业务逻辑比我认为的版本更容易理解。
我们可以使用两个规则进行此转换。第一:
if (x)
X
else
{
if (y)
Y
else
Z
}
Run Code Online (Sandbox Code Playgroud)
是相同的
if (x)
X
else if (y)
Y
else
Z
Run Code Online (Sandbox Code Playgroud)
在页面上更简单。
第二:
if (x)
{
if (y)
Y
else
Z
}
else
NX
Run Code Online (Sandbox Code Playgroud)
是相同的
if (!x)
NX
else
{
if (y)
Y
else
Z
}
Run Code Online (Sandbox Code Playgroud)
现在我们再次处于第一种情况,并且可以进一步简化。
通过重复组合这些规则,可以简化许多复杂的if-else语句。
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |