编程经验(C#)
本文记录我在编程里学到的一些小技巧,遇到了就记录一下。
1.如果通用接口中的回调没有参数,而调用时需要参数,这个时候可以用匿名函数多封装一层。例如:
1 Private void Main() 2 { 3 Fun(() => 4 { 5 Fun2(0); 6 }); 7 } 8 9 private void Fun(Action callBack) 10 {} 11 12 private void Fun2(int a) 13 {}
2.List使用lambda表达式升序或降序排序
1 private List<int> list = new List<int>(); 2 3 private void Sort() 4 { 5 list.Sort((lsh, rhs) => lsh - rhs);// 升序 6 list.Sort((lsh, rhs) => rhs - lsh);// 降序 7 }
3.对bool类型赋值尽量不要使用判断语句来赋值true 或者 false,而是把判断语句写到对bool变量赋值时。
1 private int a = 0; 2 private bool IsZero; 3 4 private void Init() 5 { 6 IsZero = a == 0;// 正确 7 8 // 下面这种写法尽量避免 9 if (a == 0) 10 { 11 IsZero = true; 12 } 13 else 14 { 15 IsZero = false; 16 } 17 }
4.使用string.IsNullOrEmpty 代替 str == null || str == string.Empty
5.避免使用一大串的if else。和一大串的switch。可以用数组来代替。
1 private bool A1; 2 private bool A2; 3 private bool A3; 4 private bool A4; 5 private bool A5; 6 7 private int currentId = 1; 8 9 private int mTarge = 0; 10 11 private void Init() 12 { 13 var targs = new[] {A1, A2, A3, A4, A5}; 14 targs[currentId - 1] = false; 15 16 for (int i = 0; i < targs.Length; i++) 17 { 18 if (targs[i]) 19 { 20 mTarge = 1; 21 break; 22 } 23 } 24 // 用上面的代码代替下面的代码 25 //switch (currentId) 26 //{ 27 // case 1: 28 // A1 = false; 29 // break; 30 // case 2: 31 // A2 = false; 32 // break; 33 // case 3: 34 // A3 = false; 35 // break; 36 // case 4: 37 // A4 = false; 38 // break; 39 // case 5: 40 // A5 = false; 41 // break; 42 //} 43 44 //if (A1) 45 //{ 46 // mTarge = 1; 47 //} 48 //else if (A2) 49 //{ 50 // mTarge = 1; 51 //} 52 //else if (A3) 53 //{ 54 // mTarge = 1; 55 //} 56 //else if (A4) 57 //{ 58 // mTarge = 1; 59 //} 60 //else if (A5) 61 //{ 62 // mTarge = 1; 63 //} 64 }
6.对于不明来路的效果,一定要断点查看堆栈,保持这个好习惯,找到问题的根源而不是去猜测。
7.任何可能会为null的变量,使用时都要进行判空。
8.计算一段程序的运行时间
1 Stopwatch stopwatch = new Stopwatch();// 用来计算程序运行时间 2 stopwatch.Start();// 计算开始 3 4 //.....要执行的代码 5 6 stopwatch.Stop();// 计算结束
9.每秒显示一次当前时间,需要在可以不停的访问的地方进行调用。
1 private DateTime mLastRefreshTime = DateTime.MaxValue; 2 3 public void RefreshTime(DateTime now) 4 { 5 var transitionTime = now; 6 if(mLastRefreshTime == DateTime.MaxValue) 7 { 8 mLastRefreshTime = transitionTime; 9 return; 10 } 11 12 if(transitionTime.Second != mLastRefreshTime.Second) 13 { 14 // 进入这里说明已经过去了一秒。 15 } 16 }
更新日期:2018/7/19/18 : 01