【发布时间】:2018-11-20 16:51:38
【问题描述】:
我继承了维护一个小型战斗游戏的工作。
游戏可以运行,但是当用户点击浏览器中的“结束”按钮时,游戏永远不会保存到数据库中。
通过API接收到“HttpPut”请求后调用该方法:
protected override TroopMappingSession UpdateGameModel(TroopMappingSession g, TroopMappingSessionDto dto)
{
var retval = base.UpdateGameModel(g, dto);
if (dto.IsActiveBattle != null && dto.IsActiveBattle == false) {
GameService.SaveToDatabase(g);
}
return retval;
}
“dto”代表TroopMappingSessionDto,是一个数据传输对象。
“g”代表TroopMappingSession类的模型。
“retval”表示TroopMappingSession类的更新模型。
就像这样,dto.IsActiveBattle 始终为“真”并且从未调用过 GameService.End()。
如果我将 dto.IsActiveBattle == false 更改为 retval.IsActiveBattle == false,那么它确实被调用了。
我的问题是,同时检查 dto.IsActiveBattle 和 retval.IsActiveBattle 是否有意义?
我不确定为什么最初的开发者同时检查 dto.IsActiveBattle != null 和 dto.IsActiveBattle == false。
谢谢!
【问题讨论】:
-
dto.IsActiveBattle 可能是数据库中可以为空的布尔值,因此检查是否为空
-
@ozzy432836 我刚刚检查过,它是一个可为空的布尔值。
-
您应该只需要检查三种可能性中的一种......永远。只是最初的编码员想要明确拒绝,而不是通过接受隐含,如果这有意义的话。此外,他们可能希望明确处理 Null 值。就个人而言,我认为有一个 == 真的很奇怪,它已经是一个布尔值了!!为什么要检查布尔值是否是某物,只需在 if 构造中按原样使用它。 (如果它可以为空,它将具有 HasValue 和 Value 属性)
标签: c# asp.net-mvc asp.net-web-api dto