using还可以这么写

       早上在逛博客园的时候,看到一篇文章写出优雅简明代码的论题集 -- Csharp(C#)篇[1] ,代码如下:

1 public IEnumerable<Order> GetOrders()
2
3 {
4
5 var orders = new List<Order>();
6 using (var con = new SqlConnection("some connection string"))
7 {
8 using (var cmd = new SqlCommand("select * from orders", con))
9 {
10 using (var rs = cmd.ExecuteReader())
11 {
12 while (rs.Read())
13 {
14
15 // ...
16
17 }
18
19 }
20
21 }
22
23 }
24 return orders;
25 }

 笔者认为上面的代码可以更加简明的写成下面的形式:

1 public IEnumerable<Order> GetOrders()
2 {
3
4 var orders = new List<Order>();
5
6 using (var con = new SqlConnection("some connection string"))
7 using (var cmd = new SqlCommand("select * from orders", con))
8 using (var rs = cmd.ExecuteReader())
9 {
10 while (rs.Read())
11 {
12 // ...
13 }
14 }
15 return orders;
16
17 }
        于是觉得纳闷,这样写没错吗?通过自己写了代码,让后用IL看下了,上面的代码也是会被编译成三个嵌套的try-finally结构,最后一个using在最里层。这说明上面的写法是没错的,而且释放资源的顺序也是从最后一个using开始,直到第一个using结束。
posted @ 2011-03-16 09:36  雁北飞  阅读(172)  评论(0编辑  收藏  举报