代码Review发现问题

FrmMain.cs中存在问题

1. int i=0 设定为了全局常量且未在类顶部,出现问题时不好查找

i 属于常用临时变量,设定全局变量容易引起混乱

2.定义的全局变量但仅在一处方法中使用,定义全局变量过多

3.变量名及控件名等意义不明确又缺少注释,如顶部定义的全局变量

long length = 0;long loading = 0;private string oldPath = null;private int random = 1;private int repeat = 0;private string quotaNum = null;

其他类似 timer1,timer2,l1,l2等等。。。

 

4. 存在多处重复或相似代码

如下面一段代码

for (int i = 0; i < FrmLog.FileListOfLoginedUser.Count; i++)
{if ((FrmLog.FileListOfLoginedUser[i].Path) == CurrentPath){string itemName = FrmLog.FileListOfLoginedUser[i].ItemName;string path = FrmLog.FileListOfLoginedUser[i].Path;string[] itemArr = new string[5];itemArr[0] = itemName;itemArr[1] = path;itemArr[2] = FrmLog.FileListOfLoginedUser[i].ItemType;itemArr[3] = FrmLog.FileListOfLoginedUser[i].FileSize.ToString() + "KB";itemArr[4] = FrmLog.FileListOfLoginedUser[i].UploadTime;itemNameList.Add(itemArr);}
}

在以下方法中多次调用而没有重构提取出来,日后返回值如有变动需要多处修改很容易混乱

void isSuccess(object iparam, object oparam)  Line : 在138-236 行

private void FrmMain_Load(object sender, EventArgs e) 465-520行

private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)  710-778行

private void btnToParent_Click(object sender, EventArgs e)  返回到上一级 782-842行

private void ChangeListViewDisplayStyle(object sender, EventArgs e)  改变文件列表显示方式 867-907行

private void btnSearch_Click(object sender, EventArgs e)   点击搜索时  1325-1377

 

另外如下面一段代码,作用是为了检测上传的文件是否存在同名文件,但是在多个方法中反复拷贝了这段代码

for (int j = 0; j < files.Length; j++){saveName = Path.GetFileName(files[j]);int i = 0;for (i = 0; i < lvItemsList.Items.Count; i++){ListViewItem item = lvItemsList.Items[i];if ((lvItemsList.Items[i].Text).Contains(Path.GetFileName(saveName))){if (MessageBox.Show("您已上传文件" + saveName + "有同名,是否覆盖?", "警告", MessageBoxButtons.YesNo) == DialogResult.Yes){repeat = 1;UpLoadFile(FrmLog.ServerUrl + "/Default.aspx/", files[j], saveName, progressBar1);// timer2.Enabled = true;i = lvItemsList.Items.Count;}else{this.Random();i = lvItemsList.Items.Count;}}}

还有下面一段代码,作用是根据文件字节数改为以KB,MB,GB等方式显示,多处存在类似代码而未提取公用方法

if (FrmLog.FileListOfLoginedUser[j].FileSize * 1024 < 1024){downSize = (FrmLog.FileListOfLoginedUser[j].FileSize * 1024) + "B";}else if (FrmLog.FileListOfLoginedUser[j].FileSize < 1024){downSize = FrmLog.FileListOfLoginedUser[j].FileSize + "KB";}else{downSize = decimal.Round(Convert.ToDecimal(FrmLog.FileListOfLoginedUser[j].FileSize / 1024), 2).ToString() + "M";}

该代码存在其他处的代码如下:

if (UsedSpace < 1000){this.Text = "地税云盘  " + FrmLog.LoginedUser.realName + "  " + UsedSpace + "KB/" + quotaNum;}else{float sumFileSize = UsedSpace / 1024;//decimal d = decimal.Parse(sumFileSize.ToString());decimal d = Convert.ToDecimal(sumFileSize);sumFileSize = float.Parse(decimal.Round(d, 2).ToString());this.Text = "地税云盘  " + FrmLog.LoginedUser.realName + "  " + sumFileSize + "M/" + quotaNum;}

上面代码微改进:

1.提取 "地税云盘  " + FrmLog.LoginedUser.realName + "  "为变量,如下

string title="地税云盘  " + FrmLog.LoginedUser.realName + "  ";

2.以MB显示直接用 (UsedSpace/1024).toString(“f2”)即可

 

 

5.代码画蛇添足晦涩难懂又欠缺注释,如

 

for (int j = 0; j < files.Length; j++){saveName = Path.GetFileName(files[j]);int i = 0;for (i = 0; i < lvItemsList.Items.Count; i++){ListViewItem item = lvItemsList.Items[i];if ((lvItemsList.Items[i].Text).Contains(Path.GetFileName(saveName))){if (MessageBox.Show("您已上传文件" + saveName + "有同名,是否覆盖?", "警告", MessageBoxButtons.YesNo) == DialogResult.Yes){repeat = 1;UpLoadFile(FrmLog.ServerUrl + "/Default.aspx/", files[j], saveName, progressBar1);// timer2.Enabled = true;i = lvItemsList.Items.Count;}else{this.Random();i = lvItemsList.Items.Count;}}}if (!(i == lvItemsList.Items.Count + 1)){UpLoadFile(FrmLog.ServerUrl + "/Default.aspx/", files[j], saveName, progressBar1);//  timer2.Enabled = true;i = lvItemsList.Items.Count;}

意图应该是存在同名文件进行提示,点Yes则上传覆盖文件,否则直接上传,这样应该思路很清晰,不知为何还要比较!(i == lvItemsList.Items.Count + 1), 另外!(i == lvItemsList.Items.Count + 1) 这种代码写法有些蹩脚容易让人费解,一般都是 i!=lvItemsList.Items.Count + 1

 

6. 代码冗长,多次嵌套if else 容易让人看晕,建议提取出方法或添加return

 

/// <summary>/// 双击进入文件夹/// </summary>private void lvItemsList_MouseDoubleClick(object sender, MouseEventArgs e){this.isFind = false;ListViewHitTestInfo info = lvItemsList.HitTest(e.X, e.Y);if (info.Item == null) return;lvItemsList.LargeImageList = UrlImage.SmallImageList;if (!(info.Item.Text.Contains(".")))//todo 此处存在问题,文件夹也可包含点 .,应以itemtype判断
            {lvItemsList.Items.Clear();CurrentPath = info.Item.Tag.ToString() + "/" + info.Item.Text;// CurrentPath = info.Item.Tag.ToString() + "/" + info.Item.Text;FrmLog.FileListOfLoginedUser = this.GetFileList();oldPath = info.Item.Tag.ToString();if (FrmLog.FileListOfLoginedUser == null){this.lblCurPath.Text = CurrentPath;return;}for (int i = 0; i < FrmLog.FileListOfLoginedUser.Count; i++){if (FrmLog.FileListOfLoginedUser[i].Path == CurrentPath){ListViewItem lvItem = new ListViewItem();lvItem.Text = FrmLog.FileListOfLoginedUser[i].ItemName;lvItem.Tag = FrmLog.FileListOfLoginedUser[i].Path;if (switchViews == "1"){/* if (!(lvItem.Text.Contains("."))){lvItem.ImageIndex = 0;}else{int icon = UrlImage.ImageIndex(System.IO.Path.GetExtension(lvItem.Text));lvItem.ImageIndex = icon;}*/int icon = 0;if (FrmLog.FileListOfLoginedUser[i].ItemType == "文件夹"){icon = UrlImage.ImageIndex(".folder");//新加
                            }else{icon = UrlImage.ImageIndex(System.IO.Path.GetExtension(lvItem.Text));//新加
                            }lvItem.ImageIndex = icon;//新加//int icon = UrlImage.ImageIndex(System.IO.Path.GetExtension(lvItem.Text));//lvItem.ImageIndex = icon;//  oldPath = FrmLog.FileListOfLoginedUser[i].Path;this.lvItemsList.Items.Add(lvItem);}else{lvItem.SubItems.Add(FrmLog.FileListOfLoginedUser[i].ItemType);if (!(lvItem.Text.Contains("."))){lvItem.SubItems.Add("");}else{lvItem.SubItems.Add(FrmLog.FileListOfLoginedUser[i].FileSize.ToString() + "KB");}//   lvItem.SubItems.Add(FrmLog.FileListOfLoginedUser[i].FileSize.ToString());
                            lvItem.SubItems.Add(FrmLog.FileListOfLoginedUser[i].UploadTime);this.lvItemsList.Items.Add(lvItem);}}else{oldPath = info.Item.Tag.ToString();}}this.lblCurPath.Text = CurrentPath;}}

转载于:https://www.cnblogs.com/s1ihome/p/3720275.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

I/O多路转接之poll——基于TCP协议

1. 函数a. 参数&#xff1a;&#xff08;1&#xff09;fds:是一个struct pollfd结构类型的指针&#xff0c;指向用于存放需要检测状态的Socket描述符&#xff1b;每当调用这个函数之后&#xff0c;系统不会清空这个数组&#xff0c;操作起来比较方便&#xff1b;特别是对于sock…

Android之 FLAG_ACTIVITY_CLEAR_TASK

FLAG_ACTIVITY_CLEAR_TASK :如果在调用Context.startActivity时传递这个标记&#xff0c;将会导致任何用来放置该activity的已经存在的task里面的已经存在 的activity先清空&#xff0c;然后该activity再在该task中启动&#xff0c;也就是说&#xff0c;这个新启动的activity变…

C# 日志管理框架:Common.Logging和log4net

01—DLL引用‍common logging是一个通用日志接口框架&#xff0c;log4net是一个强大的具体实现框架. common logging可以把输出连接到其他非log类上, 如EntLib的日志、NLog等‍‍‍‍‍‍‍‍‍‍‍‍‍‍项目中需要引入的DLL:Common.Logging.dllCommon.Logging.Core.dllCommon…

boost常用记录

1.BOOST_FOREACH 经常会遍历容器&#xff0c;写for/while循环到手痛&#xff0c;使用BOOST_FOREACH可以减少我们的工作。支持容器vector/list/set/deque/stack/queue#include <boost/foreach.hpp> BOOST_FOREACH(value,container){ //遍历每个元素 } 例子&#xff1a; ve…

Cacti迁移RRA数据迁移脚本

迁移程序和数据库完成后&#xff0c;默认的rra数据并不能出图&#xff0c; 需要从旧机器上将rra数据导出到新机器上&#xff0c;附上脚本 #导出rra数据 #!/bin/bash rrddump"/usr/bin/rrdtool dump" xmldir/data/rraxml/ rradir/var/www/html/cacti/rra/ for file in…

Android之FLAG_ACTIVITY_SINGLE_TOP

FLAG_ACTIVITY_SINGLE_TOP :如果当前栈顶的activity就是要启动的activity,则不会再启动一个新的activity实例&#xff1a;我们有一个apk&#xff0c;apk中包含两个Activity:MainActivity和ActivityA&#xff0c;点击MainActivity启动ActivityA,点击ActivityA还是启动ActivityA&…

我开发了一个对.NET程序进行瘦身的工具

我开发了一个对.Net程序瘦身的工具&#xff0c;可以把被引用但是没有被使用的程序集删除。我用它把一个.Net core程序从147兆瘦身到59.5兆。.NET中发布程序的时候有对程序集进行剪裁的功能&#xff0c;但是那个功能只能做静态检查。比如我们的项目使用了A程序集&#xff0c;A程…

三联竟出了这么赞的杂志!各领域佼佼者畅所欲言,为少年建立思维判断体系!

▲点击查看很多中国小孩的成长是断层的。10岁前被视作可爱稚子&#xff0c;被大人护着走&#xff1b;18岁猛然被定义为成年人&#xff0c;要选择大学、专业&#xff0c;开始面对感情。中间的人生呢&#xff1f;“你是个学生&#xff0c;学习是本职&#xff0c;现在谈什么人生&a…

源码lnmp

1、准备工作&#xff1a;配置yum源安装开发工具、编译工具gcc gcc-c make配置固定ip地址 关闭iptables selinuxnetstat -anpult | grep :3306netstat -anpult | grep :80若端口占用kill并service httpd stop ; chkconfig httpd offservice mysqld stop ; chkconfig mysqld off …

IIS书籍

book.51cto.com/art/200908/146040.htm

基于'sessionStorage'与'userData'的类session存储

Storage.js&#xff1a; 注意&#xff1a;此版本实现的存储在符合Web存储标准(ie8及ie8以上的版本与其他主流浏览器)的情况下与session的周期一致,但在页面不关闭的情况下没有过期时间,ie7及以下版本则默认是永久保存&#xff0c;但可以通过预留的方法setMaxAge(Number age)来设…

Android之FLAG_ACTIVITY_TASK_ON_HOME

FLAG_ACTIVITY_TASK_ON_HOME :把当前新启动的任务置于Home任务之上&#xff0c;也就是按back键从这个任务返回的时候会回到home&#xff0c;即使这个不是他们最后看见的activity 注意这个标记必须和FLAG_ACTIVITY_NEW_TASK一起使用。 实例&#xff1a; 一个apk中有MainActiv…

C# WPF中添加调试信息查看窗体

第一步&#xff1a;添加wpf窗口&#xff1b;第二步&#xff1a;在主窗体image的MouseLeftButtonUp事件中调用调试窗口&#xff1b;StatusViewWindow svWindow new StatusViewWindow();svWindow.Show();第三步&#xff1a;在主窗体中开个线程通过udp接收光电广开的数据&#xf…

杨振宁追求的物理美学,居然在这里实现,物理学史上颜值最高的组合,看完后跪了……

全世界只有3.14 % 的人关注了爆炸吧知识一沙见世界 一花窥天堂手心握无限 须臾纳永恒杨振宁曾说读上面的四句诗可以感受到物理的美但物理的美不止于此物理还有一种庄严美一种神秘美一种初窥宇宙奥秘的畏惧美物理就是如此的迷人任何语言在它的面前都很贫瘠数学让人摆脱了愚昧而…

《SAS编程与数据挖掘商业案例》学习笔记之一

今天有空看到一本挺不错的书&#xff0c;仔细阅读&#xff0c;发现很多有用的知识点&#xff0c;于是认真研读起来&#xff0c;以下是初步的要点笔记。 切换至日志窗口的命令是log、热键是F6&#xff1b; 切换至输出窗口的命令是output、热键是F7&#xff1b; 切换至编辑器窗口…

mysql字段使用timestamp类型和默认值CURRENT_TIMESTAMP表示默认为时间,类似mssql的getdate()功能;字段自增...

在mssql数据库中&#xff0c;时间字段如果想使用当前的时间&#xff0c;默认值是 getdate() 在mysql里面&#xff0c;如果是用 datetime类型&#xff0c;值用now() 是不允许的。 修改为 timestamp类型和默认值CURRENT_TIMESTAMP表示默认为时间&#xff0c;即可以达到mssql里面…

FirewallD is not running

2019独角兽企业重金招聘Python工程师标准>>> 1.发现安装好tomcat后&#xff0c;发现无法访问tomcat首页&#xff0c;后来发现防火墙没有开放8080端口。 需注意的是&#xff1a;CentOS 7防火墙换用Friewalld了&#xff0c;所以要用以下命令将端口号加进防火墙&#x…

Android之FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET&#xff1a;重置该task时清除该activity这个标志将会非常有用当你想在你的应用中有个逻辑切换&#xff0c;例如&#xff0c;一个 e-mail的应用可能用于一个命令去显示附件&#xff0c;这个命令启动一个图片浏览的activity去显示附件&#…

Dom4J 解析xml ,类查询

/*** 从XML文件比对&#xff0c;传入provinceId 返回 provinceShortName * param provinceid* return*/public static String provinceIdEXprovinceCodeFromXml(String provinceid){ String provinceShortName"";try { SAXReader sax new SAXReader(); File filene…