首页新闻找找看学习计划

如何优化这段代码?

0
悬赏园豆:20 [已解决问题] 解决于 2014-05-29 12:28
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 
 8 namespace TravelOnline
 9 {
10     public partial class WebForm1 : System.Web.UI.Page
11     {
12         protected void Page_Load(object sender, EventArgs e)
13         {
14             string A = "";
15             int B =int.MinValue;
16             int C = int.MinValue;
17             if (CheckA(A))
18             {
19                 if(CheckB(B))
20                 {
21 
22                     if (CheckC(C))
23                     {
24                         //do something
25                     }
26                     else
27                     {
28                         return;
29                     }
30                 }
31                 else
32                 {
33                     return;
34                 }
35             }
36             else
37             {
38                 return;
39             }
40         }
41 
42         private bool CheckA(String A)
43         {
44             if (A == "")
45             {
46                 return true;
47             }
48             else
49             {
50                 return false;
51             }
52         }
53 
54         private bool CheckB(int B)
55         {
56             if (B>=0)
57             {
58                 return true;
59             }
60             else
61             {
62                 return false;
63             }
64         }
65 
66         private bool CheckC(int C)
67         {
68             if (C >= 0)
69             {
70                 return true;
71             }
72             else
73             {
74                 return false;
75             }
76         }
77     }
78 }
View Code

如果某个流程需要很多判断,那么我应该如何写?感觉这样1层层下,最后自己都有种想吐的感觉了。。。。。

Anson.Mao的主页 Anson.Mao | 初学一级 | 园豆:37
提问于:2014-05-27 17:05
< >
分享
最佳答案
1

你的CheckB()和CheckC()方法明显是一样的,或许你只是当做一个例子,可能里面会有不同的实现,但是仅仅看要实现的功能,这两个方法可以只用一个就好了.重构下(⊙o⊙)哦

回到题目,还是只看功能的话,完全可以这样写

if(B>=0 && C>=0 && A==""){--和三楼差不多,

  DoSomeThing();

}else{

  return;

}

你的代码如果有很多的判断,其实你可以查看是否有代码可以重复利用的,不需要写很多Function

收获园豆:10
LgV5 | 菜鸟二级 |园豆:221 | 2014-05-29 11:35
其他回答(6)
1
1 if (CheckA(A) && CheckB(B) && CheckC(C))
2 {
3     //do something
4 }
5 else
6 {
7     return;
8 }

这样?

l3oz | 园豆:586 (小虾三级) | 2014-05-27 17:12

貌似也可以~。不过感觉怪怪的~

支持(0) 反对(0) Anson.Mao | 园豆:37 (初学一级) | 2014-05-27 17:20

@YinShen.Mao: 哪里怪怪的拉。。我觉得帅帅的。。

支持(0) 反对(0) l3oz | 园豆:586 (小虾三级) | 2014-05-27 17:22
0

IF没什么问题,只要别嵌套.我一般多个判断的时候,都是写成过滤的,就是上面条件不满足就return.这样就可以不用嵌套IF

楼上的不错

吴瑞祥 | 园豆:28675 (高人七级) | 2014-05-27 17:14
0

单就你贴出的代码来看,应该这样来优化:

if(B >= 0 && C >= 0 && A == "") { // do something}

Launcher | 园豆:44980 (高人七级) | 2014-05-27 17:24
0

使用事件,挂Func数组。或者直接挂Delegate。

看你怎么用了。如果喜欢,自己写个函数回调队列。

Tech-Worm | 园豆:202 (菜鸟二级) | 2014-05-27 17:53
1

优化代码,可以通过Reflector查看编译器生成的代码,查看编译器优化过得代码是什么样的

秋壶冰月 | 园豆:5441 (大侠五级) | 2014-05-27 20:31
1

可以使用职责链模式,判断的方法还像你这样封装好,然后你只要设定好链上的下家,最后程序帮你按顺序调用链上每个节点。

收获园豆:10
happydaily | 园豆:581 (小虾三级) | 2014-05-28 08:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册