C# dto和类对象上的逻辑检查

C# dto和类对象上的逻辑检查,c#,asp.net-mvc,asp.net-web-api,dto,C#,Asp.net Mvc,Asp.net Web Api,Dto,我继承了维护一个小型战斗游戏的工作 游戏可以运行,但当用户单击浏览器中的“结束”按钮时,游戏永远不会保存到数据库中 通过API接收“HttpPut”请求后调用此方法: protected override TroopMappingSession UpdateGameModel(TroopMappingSession g, TroopMappingSessionDto dto) { var retval = base.UpdateGameModel(g, dto);

我继承了维护一个小型战斗游戏的工作

游戏可以运行,但当用户单击浏览器中的“结束”按钮时,游戏永远不会保存到数据库中

通过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”表示TroupMappingSessionDTO,它是一个数据传输对象

“g”表示部队装备会话类的模型

“retval”表示更新的TroopMappingSession类模型

正因为如此,dto.IsActiveBattle始终为“true”,并且从未调用GameService.End()

如果我将dto.IsActiveBattle==false更改为retval.IsActiveBattle==false,则会调用它

我的问题是,检查dto.IsActiveBattle和retval.IsActiveBattle是否有意义

我不知道为什么最初的开发人员同时检查dto.IsActiveBattle!=null和dto.IsActiveBattle==false

谢谢

试试这个

  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;
    }
检查游戏是否保存。这证明您的retval和GameService正在工作

然后,您可以添加一些逻辑,以确保它仅在dto.IsActiveBattle为false时保存


要点是,当var retval=base.UpdateGameModel(g,dto)时,dto.IsActiveBattle可能被更改为true;已调用。

dto.IsActiveBattle可能是数据库中可为空的bool,因此检查null@ozzy432836我刚检查过,这是一个可为空的布尔值。你只需要检查三种可能性中的一种。。。曾经如果有意义的话,只是最初的编码人员希望在拒绝时明确表示,而不是通过接受来暗示。此外,他们可能希望在处理空值时显式地进行。就我个人而言,我认为有一个==在那里真的很奇怪,它已经是一个布尔值了!!为什么要检查布尔值是否是某种东西,只需按原样在if构造中使用它。(如果可以为null,则它将具有HasValue和Value属性)是的,在调用UpdateGameModel()后,retval.IsActiveBattle已更改为“true”。但是,在单步执行代码时,dto.IsActiveBattle始终为“true”,这就是为什么它没有保存到数据库中。