下面两行代码写的有问题吗?
List<City> cities = new List<City>();
cities = GetAllCities();
有问题!第一行代码,无谓构造了一个List<City>对象,然后把它丢掉了。
犯错的原因,大概是不清楚.NET中"值类型"与"引用类型"的区别。变量cities的类型是"引用类型",内存中变量本身并不存储List<City>,而是存储了一个地址,这个地址指向了一个List<City>对象。上面代码中,第一行相当于构造了一个List<City>对象并把对象地址赋值给了cities变量。第二行代码,通过一个方法的返回值,又给变量cities赋了一个新地址,那么之前构造的那个List<City>对象就没有任何变量再指向它,那段内存空间的最终命运,只能是等待垃圾回收了。
既然第一行代码中构造的List<City>毫无必要,那么正确的写法应该如下:
List<City> cities = null;
cities = GetAllCities();
或者干脆
List<City> cities = GetAllCities();
reference 1: http://msdn.microsoft.com/en-us/library/t63sy5hs.aspx
reference 2: http://www.codeproject.com/Articles/76153/Six-important-NET-concepts-Stack-heap-value-types