屌丝和美女根本就不是一个星球来的,一写代码就露馅了

本文对比了两位程序员对于同一需求的不同实现方式,一位采取了直接覆盖原有数据的方法,而另一位则选择了保留原有数据的方式进行更新,后者虽然在特定情况下也能正常工作,但潜藏了不易发现的bug。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    有这么一个函数,功能是通过传入的数据,更新一些界面显示。要求是传入的数据中,结构体成员中,字符串为NULL的、数字小于0的都保持原样不要更新。

屌丝是这么写的:

/// <summary>
        /// 修改书本信息
        /// </summary>
        /// <param name="file"></param>
        public void UpdateBookCase(Model_File file) //传入参数叫file是个结构体
        {
            if (!DataCache.Instance.DicBookItems.Keys.Contains(file.FileID))
                return;  //如果之前没折腾过这玩意,就不管
            Model_File OldFile = DataCache.Instance.DicBookItems[file.FileID].Tag as Model_File;  //折腾过的就拿出来,叫OldFile
            
            if (file.DetailFileList != null)
            {
                OldFile.DetailFileList = file.DetailFileList;
            }
            if (file.FileName != null)
            {
                OldFile.FileName = file.FileName;
            }
            if (file.FilePath != null)
            {
                OldFile.FilePath = file.FilePath;
            }
            if (file.FileSize != null)
            {
                OldFile.FileSize = file.FileSize;
            }
            if (file.FileType != null)
            {
                OldFile.FileType = file.FileType;
            }
            if (file.SendName != null)
            {
                OldFile.SendName = file.SendName;
            }
            if (file.SendNum != null)
            {
                OldFile.SendNum = file.SendNum;
            }
            DataCache.Instance.DicBookItems[file.FileID].UpdateBookItemControl(OldFile);
        }


美女是这么写的:

/// <summary>
        /// 修改书本信息
        /// </summary>
        /// <param name="file"></param>
        public void UpdateBookCase(Model_File file)
        {
            if (!DataCache.Instance.DicBookItems.Keys.Contains(file.FileID))
                return;
            Model_File OldFile = DataCache.Instance.DicBookItems[file.FileID].Tag as Model_File;
            
            if (file.DetailFileList == null)
            {
                file.DetailFileList = OldFile.DetailFileList;
            }
            if (file.FileName == null)
            {
                file.FileName = OldFile.FileName;
            }
            if (file.FilePath == null)
            {
                file.FilePath = OldFile.FilePath;
            }
            if (file.FileSize == null)
            {
                file.FileSize = OldFile.FileSize;
            }
            if (file.FileType == null)
            {
                file.FileType = OldFile.FileType;
            }
            if (file.SendName == null)
            {
                file.SendName = OldFile.SendName;
            }
            if (file.SendNum == null)
            {
                file.SendNum = OldFile.SendNum;
            }
            DataCache.Instance.DicBookItems[file.FileID].UpdateBookItemControl(file);
        }

严格来说只有三处天翻地覆的不同:==null和!=null ; file赋给OldFile和OldFile赋给file ; 最后更新OldFile和更新file。你会发现美女的超级逻辑,运行起来居然也是对的,在不触发内在问题的时候,可以正常使用,这也是为什么这个BUG居然潜伏了一年多,作为屌丝的我,彻底的拜倒在美女的键盘之下

转载于:https://my.oschina.net/jinzei/blog/142560

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值