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 }
如果某个流程需要很多判断,那么我应该如何写?感觉这样1层层下,最后自己都有种想吐的感觉了。。。。。
你的CheckB()和CheckC()方法明显是一样的,或许你只是当做一个例子,可能里面会有不同的实现,但是仅仅看要实现的功能,这两个方法可以只用一个就好了.重构下(⊙o⊙)哦
回到题目,还是只看功能的话,完全可以这样写
if(B>=0 && C>=0 && A==""){--和三楼差不多,
DoSomeThing();
}else{
return;
}
你的代码如果有很多的判断,其实你可以查看是否有代码可以重复利用的,不需要写很多Function
IF没什么问题,只要别嵌套.我一般多个判断的时候,都是写成过滤的,就是上面条件不满足就return.这样就可以不用嵌套IF
楼上的不错
单就你贴出的代码来看,应该这样来优化:
if(B >= 0 && C >= 0 && A == "") { // do something}
使用事件,挂Func数组。或者直接挂Delegate。
看你怎么用了。如果喜欢,自己写个函数回调队列。
优化代码,可以通过Reflector查看编译器生成的代码,查看编译器优化过得代码是什么样的
可以使用职责链模式,判断的方法还像你这样封装好,然后你只要设定好链上的下家,最后程序帮你按顺序调用链上每个节点。