有这么一个函数,功能是通过传入的数据,更新一些界面显示。要求是传入的数据中,结构体成员中,字符串为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居然潜伏了一年多,作为屌丝的我,彻底的拜倒在美女的键盘之下