编程经验(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 }
View Code

 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     }
View Code

 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     }
View Code

6.对于不明来路的效果,一定要断点查看堆栈,保持这个好习惯,找到问题的根源而不是去猜测。

7.任何可能会为null的变量,使用时都要进行判空。

8.计算一段程序的运行时间

1 Stopwatch stopwatch = new Stopwatch();//  用来计算程序运行时间
2 stopwatch.Start();//  计算开始
3 
4 //.....要执行的代码        
5 
6 stopwatch.Stop();//  计算结束
View Code

 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

posted @ 2018-04-02 14:05  大文豪  阅读(556)  评论(1编辑  收藏  举报

123